cmakeを使うには、私のプロジェクトでCMakeを使って整理した完全な最小限のハッシングライブラリをcmphライブラリをubuntuマシンにインストールし、 main.c私は、次のコマンドを使用してgccの5.3.0を使用してこのファイルをコンパイルしようとした場合私のプロジェクトでCMakeを使ってコンパイルしたcmphライブラリをリンクするには
は:
gcc main.c
は、私は次のような出力が得られます
/tmp/ccSOH5ob.o: In function `main':
testperfect.c:(.text+0x63): undefined reference to `cmph_io_vector_adapter'
testperfect.c:(.text+0x73): undefined reference to `cmph_config_new'
testperfect.c:(.text+0x88): undefined reference to `cmph_config_set_algo'
testperfect.c:(.text+0x9b): undefined reference to `cmph_config_set_mphf_fd'
testperfect.c:(.text+0xa7): undefined reference to `cmph_new'
testperfect.c:(.text+0xb7): undefined reference to `cmph_config_destroy'
testperfect.c:(.text+0xca): undefined reference to `cmph_dump'
testperfect.c:(.text+0xd6): undefined reference to `cmph_destroy'
testperfect.c:(.text+0xe2): undefined reference to `cmph_load'
testperfect.c:(.text+0x118): undefined reference to `cmph_search'
testperfect.c:(.text+0x153): undefined reference to `cmph_destroy'
testperfect.c:(.text+0x15f): undefined reference to `cmph_io_vector_adapter_destroy'
しかし、私は、このコマンドを実行する場合:
をgcc main.c $(pkg-config --libs cmph) -o main
正常にコンパイルされて実行されます。
は、今私は私のプロジェクトでは、コードの類似した部分を追加する必要があるとCMakeList.txtは次のように書かれている:
set(PROJECT_EXECUTABLE ${PROJECT_NAME})
# Compiling flags.
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR
CMAKE_CXX_COMPILER_ID MATCHES "Clang")
set(CMAKE_CXX_FLAGS_RELEASE "-O2")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g")
set(CMAKE_CXX_FLAGS_DEBUG "-g")
set(CMAKE_CXX_FLAGS_MINSIZEREL "-Os")
endif()
# Inject project config.
configure_file(
${PROJECT_INCLUDE_DIR}/phsim/config.hpp.in
${PROJECT_INCLUDE_DIR}/phsim/config.hpp
)
include(FindPkgConfig)
find_package(PkgConfig REQUIRED)
pkg_search_module(CMPH REQUIRED cmph)
target_link_libraries(Phsim ${CMPH_LIBRARIES})
target_include_directories(Phsim PUBLIC ${CMPH_INCLUDE_DIRS})
target_compile_options(Phsim PUBLIC ${CMPH_CFLAGS_OTHER})
# Compile executable.
file(GLOB SOURCES ${PROJECT_SRC_DIR}/*.cpp)
add_executable(${PROJECT_EXECUTABLE} ${SOURCES})
set_target_properties(${PROJECT_EXECUTABLE} PROPERTIES
VERSION ${PHSIM_VERSION_LITER}
)
そして、私はcmakeのを実行してみてください。エラーメッセージだけを表示します:
CMake Error at src/CMakeLists.txt:20 (target_link_libraries):
Cannot specify link libraries for target "Phsim" which is not built by this
project.
私はプロジェクトをコンパイルしない限り、ターゲット実行可能ファイルを取得しません。ライブラリリンクに関連するコマンドを使わずにプロジェクトをコンパイルしようとすると、コンパイラは質問の冒頭で同様のリンクエラーを表示します。
Undefined reference to cmph functions even after installing cpmh library
をそして私は、これらのサイトが提供する手順を試してみました:
私は、次の質問をチェックした
https://cmake.org/Wiki/CMake:How_To_Find_Libraries
https://cmake.org/cmake/help/v3.6/module/FindPkgConfig.html
感謝を事前に。
'CMPH_LIBRARIES'の値は何ですか? – usr1234567
@ usr1234567これは/ usr/share/libで、パターンlibcmph *に一致する.aと.soファイルがあります。* –
phismはどこにも宣言されていません。あなたは 'add_executable'を逃しましたか?それはあなたがそれに物をリンクしようとする前に定義する必要があります。あなたの自動add_executableコードは奇妙に見えますが、私はそのようなことはしません。それはCMakeスタイルではありません。 – usr1234567