1

CMake を使用してプロジェクトをビルドすると、次のリンカー エラーが発生し、解決方法がわかりません。を使用make VERBOSE=1すると、私には問題ないように見える生成されたコマンドが明らかになります。

azg@HPC:~/code/myproject/build_debug$ /usr/bin/c++ -Wall -Wextra -Wshadow -Woverloaded
   -virtual  -g3 -ggdb3 -fopenmp CMakeFiles/mymain.dir/main/cpp
   /algorithm/mymain.cc.o -o mymain -rdynamic 
   my_library.a /opt/dev/boost/lib/libboost_filesystem.a /opt/dev/boost      
   /lib/libboost_graph.a /opt/dev/boost/lib/libboost_system.a /opt/dev/boost
   /lib/libboost_program_options.a /opt/dev/boost/lib/libboost_chrono.a /usr/local
   /hdf5/lib/libhdf5.so -lz -lrt -ldl -lm /usr/local/cuda-5.0/lib64/libcudart.so -lcuda 
   /usr/local/cuda-5.0/lib64/libcublas.so /opt/dev/magma/1.4.0-beta2/lib/libmagma.a  
   /opt/intel/lib/intel64/libimf.so -Wl,-rpath,/usr/local/hdf5/lib:/usr/local/cuda-
   5.0/lib64:/opt/intel/lib/intel64/usr/bin/ld:/usr/local/cuda-5.0/lib64/libcublas.so: 

およびリンカーエラー:

undefined reference to symbol 'cudaStreamCreate'
/usr/bin/ld: note: 'cudaStreamCreate' is defined in DSO /usr/local/cuda-5.0/lib64/libcudart.so so try adding it to the linker command line
/usr/local/cuda-5.0/lib64/libcudart.so: could not read symbols: Invalid operation
collect2: ld returned 1 exit status
4

1 に答える 1

3

リンカのエラー メッセージは、これを修正するために何をすべきかを正確に示しています。

共有ライブラリをファイルとして指定しないでください。これは、それらを無視するコンパイラに渡します。各ライブラリ検索パスを -L でリンカーに渡し、各ライブラリ スタブ名を -l で渡します。リンカーは、適切なバージョンのライブラリ (利用可能なものと渡されたビルド オプションに応じて共有または静的) を検索し、依存関係の完全なリストをリンクします。結果のビルド コマンドは次のようになります。

c++ -Wall -Wextra -Wshadow -Woverloaded \
   -virtual  -g3 -ggdb3 -fopenmp CMakeFiles/mymain.dir/main/cpp \
   /algorithm/mymain.cc.o -o mymain -rdynamic my_library.a \
   -L/opt/dev/boost/lib \
   -L/usr/local/hdf5/lib \
   -L/usr/local/cuda-5.0/lib64 \
   -L/opt/dev/magma/1.4.0-beta2/lib \
   -L/opt/intel/lib/intel64 \
   -lboost_filesystem \
   -lboost_graph \
   -lboost_system \
   -lboost_program_options \
   -lboost_chrono \
   -lhdf5 \
   -lz -lrt -ldl -lm \
   -lcudart \
   -lcuda \
   -lcublas \
   -lmagma \
   -limf
   -Wl,-rpath,/usr/local/hdf5/lib:/usr/local/cuda- 5.0/lib64:/opt/intel/lib/intel64/usr/bin/ld

[大きな免責事項: ラップランドの真ん中にある非常に不安定な GSM 接続の端にある iPad でカット アンド ペーストしました。実際に動作することは期待されていません]

Cmake でそれを行う方法がわかりませんし、Makefile も見せてくれませんでした。

于 2013-07-23T10:22:01.153 に答える