Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 代码不';当我分开编译和链接时,我不会构建_C++_Compilation_Linker_G++ - Fatal编程技术网

C++ 代码不';当我分开编译和链接时,我不会构建

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++

我有一个名为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++ -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会自动将其添加到编译步骤中,我很难将其删除。。。