C++ 代码不';当我分开编译和链接时,我不会构建
我有一个名为main.cpp的文件,我使用的共享库具有完整路径:“C++ 代码不';当我分开编译和链接时,我不会构建,c++,compilation,linker,g++,C++,Compilation,Linker,G++,我有一个名为main.cpp的文件,我使用的共享库具有完整路径:“/usr/local/lib/libcryptopp.a”,我的包含目录是:“/usr/local/include/cryptopp” 当我尝试使用此命令生成时: g++ -o crypto -g main.cpp -I /usr/local/include/cryptopp /usr/local/lib/libcryptopp.a 代码构建完美,创建了可执行的“crypto”。但是,当我将编译和链接分开时,如下所示: g++
/usr/local/lib/libcryptopp.a
”,我的包含目录是:“/usr/local/include/cryptopp
”
当我尝试使用此命令生成时:
g++ -o crypto -g main.cpp -I /usr/local/include/cryptopp /usr/local/lib/libcryptopp.a
代码构建完美,创建了可执行的“crypto”。但是,当我将编译和链接分开时,如下所示:
g++ -c -g -I/usr/local/include/cryptopp -o main.o main.cpp
g++ -o crypto main.o -L/usr/lib64 /usr/local/lib/libcryptopp.a
我发现以下错误:
/usr/local/lib/libcryptopp.a(algparam.o): In function `CryptoPP::CombinedNameValuePairs::~CombinedNameValuePairs()':
/home/stsadm/JJ/algparam.h:135: undefined reference to `operator delete(void*, unsigned long)'
/usr/local/lib/libcryptopp.a(pubkey.o): In function `CryptoPP::P1363_MGF1KDF2_Common(CryptoPP::HashTransformation&, unsigned char*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, bool, unsigned int)':
/home/stsadm/JJ/pubkey.cpp:17: undefined reference to `operator delete(void*, unsigned long)'
/usr/local/lib/libcryptopp.a(pubkey.o): In function `CryptoPP::PK_SignatureScheme::InvalidKeyLength::~InvalidKeyLength()':
/home/stsadm/JJ/cryptlib.h:2459: undefined reference to `operator delete(void*, unsigned long)'
/usr/local/lib/libcryptopp.a(pubkey.o): In function `CryptoPP::PK_SignatureScheme::KeyTooShort::~KeyTooShort()':
/home/stsadm/JJ/cryptlib.h:2469: undefined reference to `operator delete(void*, unsigned long)'
/usr/local/lib/libcryptopp.a(pubkey.o): In function `CryptoPP::HashFilter::~HashFilter()':
/home/stsadm/JJ/filters.h:517: undefined reference to `operator delete(void*, unsigned long)'
我必须让这种分离的方式工作,因为不相关的原因。你知道为什么分离版本会给我链接错误吗
你知道为什么包含一个额外的(尽管是不必要的)库目录会引起问题吗
我能看到的唯一原因是,如果您在/usr/lib64
中有libstdc++.a
或libstdc++.so
,并且该库以某种方式损坏,或者由于某种(意外)原因而丢失了::操作符delete
要查看“常规”链接拾取的是哪个(未损坏)libstdc++
,请执行以下操作:
g++ -o crypto main.o /usr/local/lib/libcryptopp.a -Wl,-y,_ZdlPvm
那
-L/usr/lib64
看起来可疑。正如@PeteBecker所说,lib4
看起来可疑。在最初的(单个)g++命令行中,您看到了什么64?不要忘记在链接行中包含-g
选项。这不是你们问题的一部分,但当你们的问题得到解决时,它将成为问题的一部分。谢谢你们,就是这样!现在。。。你知道为什么包含一个额外的(尽管是不必要的)库目录会引起问题吗??Qt Creator会自动将其添加到编译步骤中,我很难将其删除。。。