Apache ポータブル ランタイム ライブラリ (APR) と cmake を使用してプロジェクトをコンパイルしたいと考えています。Linux と一緒に実行すると、すべて問題ないように見えます (apr-1-config シェル スクリプトを使用できるため)。それにもかかわらず、ウィンドウではcmake
、含まれているファイルを正しくバインドまたはリンクしていないように見えます。libapr-1.lib
静的ライブラリとしてインポートするなど、いくつかの異なる方法を試しましたがtarget_link_library
、何も機能していないようです。私はいつも
error LNK2019: unresolved external symbol
Visual Studio を使用してコンパイルするときのリンカー エラー。apt_pool_create
パラメーターを必要としないため、呼び出している関数の例として、どの関数を呼び出しているかは問題ではありません。Visual Studio が IntelliSense を使用してファイルを検索し、すべてのドキュメントをインラインで表示しているので、私はまだ疑問に思っています。apt_pool*
また、ポインター オブジェクトが定義され、NULL で初期化されている場合、コンパイラはビルドに失敗しません。
なぜこれらのリンカの問題があるのか 、誰でも知っているかもしれません。CMakeLists.txt
以下は、ファイルの一部の抜粋です。
CMakeLists.txt (部分)
# Include unimrcp requirements (apr package)
IF(WIN32) # Search APR in windows
INCLUDE(${PROJECT_SOURCE_DIR}/cmake_modules/FindAPR_windows.cmake)
ELSE(WIN32) # Search APR in unix
INCLUDE(${PROJECT_SOURCE_DIR}/cmake_modules/FindAPR_unix.cmake)
ENDIF(WIN32)
# Set link libraries
SET(TARGET_LINK_LIBS
${APR_LIBRARIES}
${APRUTIL_LIBRARIES}
${PTHREADS}
)
SET(CLIENT_SOURCES ...)
SET(CLIENT_HEADERS ...)
# Include intermediary files
INCLUDE_DIRECTORIES(
${CMAKE_CURRENT_BINARY_DIR}
${APR_INCLUDE_DIR}
${APRUTIL_INCLUDE_DIR}
)
# Add executable and link libraries
ADD_EXECUTABLE(${CLIENT_TARGET} src/main.cpp ${CLIENT_SOURCES} ${CLIENT_HEADERS})
TARGET_LINK_LIBRARIES(${CLIENT_TARGET} ${TARGET_LINK_LIBS})
はCLIENT_TARGET
、出力用の事前定義されたターゲット名です。
[Windows の場合、次の FindAPR.cmake モジュール (FindAPR_windows.cmake ファイル) を使用しています]( https://svn.apache.org/repos/asf/incubator/celix/trunk/cmake/modules/FindAPR.cmake )。
Linux の場合、次の FindAPR.cmake モジュール (FindAPR_unix.cmake ファイル) を使用しています。
apr-1-config
シェルスクリプトを検索して実行します。
Linux では、私の APR_LIBRARIES 変数は次のようになります。
-L/usr/lib;-lapr-1
Windowsはそのパスでライブラリを直接使用しています:
{path_to_lib}/libapr-1.lib
上記のように、CMake はリンクに関するエラーを通知しません。Visual Studio で apr 関数を呼び出すと、LNK2019 エラーが発生します。
多分誰かがこの問題のヒントを持っていますか?