![Cmake를 사용하여 실행 가능하고 연결 가능한 공유 라이브러리 구축](https://linux55.com/image/144149/Cmake%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%8B%A4%ED%96%89%20%EA%B0%80%EB%8A%A5%ED%95%98%EA%B3%A0%20%EC%97%B0%EA%B2%B0%20%EA%B0%80%EB%8A%A5%ED%95%9C%20%EA%B3%B5%EC%9C%A0%20%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC%20%EA%B5%AC%EC%B6%95.png)
executable shared-library
사용할 것을 만드는 방법은 무엇입니까 cmake
?
그것은 다음과 같습니다:
libtest.so::연결 가능한 공유 라이브러리
libtest.so::실행도 가능
노트:gcc/g++ 옵션은 동일한 효과를 얻는 것으로 알려져 있습니다(https://unix.stackexchange.com/a/223411/152034). 하지만 솔루션에는 여전히 cmake
방법이 필요합니다.
답변1
노트: 이에 대한 첫 번째 정보는 공개된 것 같습니다.질문cmake와 관련이 있습니다.따라서 이는 동일한 목표를 달성하기 위한 간접적인 해결책으로 간주될 수 있습니다.
이제 표시된 대로 사용하십시오 cmake
.
테스트.cpp
#include <stdio.h>
void sayHello (char *tag) {
printf("%s: Hello!\n", tag);
}
int main (int argc, char *argv[]) {
sayHello(argv[0]);
return 0;
}
ttest/test_test.cpp
#include <stdio.h>
extern void sayHello (char*);
int main (int argc, char *argv[]) {
printf("\nNow Inside test-test !\n");
sayHello(argv[0]);
return 0;
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.5)
project(pie_test)
#shared-lib as executable
add_library(${PROJECT_NAME} SHARED
test.cpp
)
target_compile_options(${PROJECT_NAME} PUBLIC "-pie")
target_link_libraries(${PROJECT_NAME} "-pie -Wl,-E")
set_property(TARGET ${PROJECT_NAME} PROPERTY POSITION_INDEPENDENT_CODE 1)
#executable linking to the executable-shared-library
add_executable(test_test
ttest/test_test.cpp
)
target_link_libraries(test_test pie_test)
set_property(TARGET test_test PROPERTY POSITION_INDEPENDENT_CODE 1)
build.sh
#!/bin/bash
rm -rf build
mkdir build
cd build
cmake .. #--debug-output
make VERBOSE=1
echo "Done!"
echo ""
gcc 옵션 참조여기.