私は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ターゲットが見つからない可能性がありますか?
'Boost_LIBRARIES'の内容は何ですか? – wasthishelpful
@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
あなたのリンクコマンドには一貫していません。インポートしたターゲットを使用しようとしましたか? 'target_link_libraries(tester Boost :: system ...)'のようなものです。回避策をさらに進めたい場合は、完全なCMakeファイル – wasthishelpful