2

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 エラーが発生します。

多分誰かがこの問題のヒントを持っていますか?

4

0 に答える 0