我試圖建立正好從下面的代碼可執行的成功(說這是文件kt.cu
中):鏈接和一個升壓庫出現故障時,用gcc
#include <boost/program_options.hpp>
int main(int argc, char** argv)
{
boost::program_options::options_description options("Options");
return 0;
}
這裏有4個構建它的可能的方式,都應該工作,導致沒有鏈接錯誤二進制:
- 編譯CUDA NVCC,鏈接與CUDA NVCC
- 編譯CUDA NVCC,與G ++ 鏈接210
- 與克編譯++,鏈路與CUDA NVCC
- 編譯克++,使用g ++
相關編譯和鏈接命令鏈接:
編譯CUDA NVCC:
nvcc -std=c++11 -c kt.cu
使用g ++編譯(強制它被編譯爲.cpp文件):
g++ -x c++ -std=c++11 -c kt.cu
鏈路與CUDA NVCC:
nvcc -o kt -lboost_program_options -lcudart -L/usr/local/cuda/lib64 kt.o
鏈路與克++:
g++ -o kt -rdynamic -lboost_program_options -lcudart -L/usr/local/cuda/lib64 kt.o
如果我和G ++編譯,鏈接作品不管哪個鏈接器我選擇(即選項3和4工作)。如果我使用nvcc編譯,鏈接失敗,不管我選擇(即選擇1和2失敗)
這裏的錯誤消息我得到的鏈接器:
tmpxft_00003de6_00000000-4_kt.cudafe1.cpp:(.text+0x76): undefined reference to `boost::program_options::options_description::options_description(std::string const&, unsigned int, unsigned int)'
collect2: error: ld returned 1 exit status
這是爲什麼失敗?我應該怎麼做才能解決/解決這個問題?
注:
- 我使用Debian拉伸定期
apt-get dist-upgrade
秒。 - 我不認爲boost :: program_options有什麼特別之處,即當我也使用它們時,它會發生在其他boost庫上。這可能不是特定促銷,但我不能說。
- 版本(這應該不是我想的):CUDA 7.5,Boost 1.58,g ++ 4.9.3。還嘗試過g ++ 4.8.5,效果相同。也嘗試編譯和linmking與g ++ 5.2.1只,也工作。
- 編輯:我可以確認這是否不是發生在Fedora 20上,其中g ++ 4.8.3,Boost 1.54,CUDA 7.5。它可以是Boost版本的東西嗎?
就我所知,使用g ++構建該文件所顯示的命令只是重複編譯命令 - 我沒有在任何地方看到鏈接步驟。無論如何,在Fedora 20,Fedora 20,boost 1.54,CUDA 7.5,gnu 4.8.3上,我沒有任何編譯和鏈接代碼的麻煩,如[this](http://pastebin.com/Gjvr4ztn)。 [This](http://pastebin.com/p4t6sBNS)也起作用,用nvcc編譯並用g ++連接。 –
@RobertCrovella:看我的編輯。 – einpoklum