2016-10-23 12 views
0

私はBoostのデフォルトバージョンがインストールされているシステムを持っていますが、/optの下に別のバージョンがインストールされています。私が使用します。CMake(3.5.2)は非絶対ブーストlibパスを使用していません-L boostdir

find_package(Boost 1.54.0 QUIET REQUIRED 
    COMPONENTS 
    system program_options regex filesystem 
) 

くれ${Boost_INCLUDE_DIR}${Boost_LIBRARY_DIRS}/opt/etc/etc/include/opt/etc/etc/libを与えること。

私も使用

target_link_libraries(tester 
    ${Boost_LIBRARIES} 
    ${CUDA_LIBRARIES} 
    ${CUDA_cupti_LIBRARY} 
    nvToolsExt 
    OpenCL 
    cudadevrt 
    # more stuff here 
) 

(これはあなたが迷っている場合はCUDAにリンクされたコードではありません)

のMakefileが実行されるように、私は、コンパイルコマンドは-I/opt/etc/etc/includeを持っている参照してください。

ただし、リンクコマンドではブーストライブラリに絶対名は使用されず、-L/opt/etc/etc/boostはありません。他のライブラリ(CUDAのもの)の場合は、少なくとも-Lの適切なディレクトリになります。

どうしてもリンカが私のシステムのデフォルトバージョンのブーストライブラリを使用しようとします。つまり、リンクコマンドは次のようになります。

g++ -bunch -of -switches bunch.o of.o files.o -lboost_system 
-lboost_program_options -lboost_regex -lboost_filesystem -Wl,-Bstatic 
-lcudart_static -Wl,-Bdynamic -lpthread -ldl -lrt 
/usr/local/cuda/extras/CUPTI/lib64/libcupti.so -lnvToolsExt -lOpenCL 
-lcudadevrt lib/morestuff.a -Wl,-Bstatic -lcudart_static -Wl,-Bdynamic 
-lpthread -ldl -lrt -Wl,-rpath,/usr/local/cuda/extras/CUPTI/lib64 

(はい、あります冗長性が、それはここでの問題はありません。)なぜこれが起こってかもしれない

PS:これはかなりMCVEではないことを知っています。そのため、私はそのような問題のための「共通の救済策」を求めています。


編集:インポートされたターゲットを使用して

target_link_libraries(tester 
    Boost::system Boost::program_options 
    Boost::regex Boost::file_system 
    ${CUDA_LIBRARIES} ${CUDA_cupti_LIBRARY} 
    nvToolsExt OpenCL cudadevrt ktkernels) 

すなわち:私は私のtarget_link_librariesを切り替え試みたがために、コマンド。しかし、私は得る:

IMPORTEDターゲットのfind_package()コールが見つからないか、またはALIASターゲットが見つからない可能性がありますか?

+1

'Boost_LIBRARIES'の内容は何ですか? – wasthishelpful

+0

@wththishelpful: '/opt/etc/etc/lib/libboost_system.so;/opt/etc/etc/lib/libboost_program_options.so;/opt/etc/etc/lib/libboost_regex.so;/opt/etc/です。 etc/lib/libboost_filesystem.so' – einpoklum

+0

あなたのリンクコマンドには一貫していません。インポートしたターゲットを使用しようとしましたか? 'target_link_libraries(tester Boost :: system ...)'のようなものです。回避策をさらに進めたい場合は、完全なCMakeファイル – wasthishelpful

答えて

0

これ(回避策は?)作品:CMakeLists.txtファイル内

set (CMAKE_SHARED_LINKER_FLAGS ${CMAKE_SHARED_LINKER_FLAGS} "-L${Boost_LIBRARY_DIRS}") 
set (CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} "-L${Boost_LIBRARY_DIRS}") 

を。

+0

'link_directories(" $ {Boost_LIBRARY_DIRS} ")'は同等でなければなりませんが、それを使う必要はありません。 – wasthishelpful

+0

@は面白いです:いいえ。残念ながら、それと同等ではありません。私の回避策では、リンケージコマンドは '-L/opt/etc/etc/lib'です。あなたの 'link_directories'コマンドで - それはしません(しかし、' -L'があると思うところではもっと空白があります)。 – einpoklum

関連する問題