当编译一个使用 ZeroMQ 的简单 c++ 文件时,我得到:
/usr/bin/ld: /tmp/ccbHbSAY.o: undefined reference to symbol '_ZNSt8ios_base4InitD1Ev@@GLIBCXX_3.4'
//usr/lib/x86_64-linux-gnu/libstdc++.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
我认为这是在试图告诉我,我正在调用一个我所链接的共享库中不存在的符号。这是我的编译命令:
gcc -Wall -I/usr/local/include zeromq_worker.cpp /usr/local/lib/libzmq.so.5.0.2
我尝试使用libzqm.so
和libzmq.so.5
,它们也在/usr/local/lib
,但出现相同的错误
另外,_ZNSt8ios_base4InitD1Ev@@GLIBCXX_3.4
是某些结构的编译名称。它是哪一个?我认为这有助于理解错误的来源。
答案1
如果它是 C++ 文件,则使用g++
not 。gcc
另外,通常也不会以这种方式明确指定库:通常您应该给出一个链接指令,如-lzmq
前面所述,并在必要时加上形式为的库搜索路径指令-L /usr/local/lib
。
因此尝试
g++ -Wall -I /usr/local/include zeromq_worker.cpp -L /usr/local/lib -lzmq