当我分离编译和链接时,代码不构建

Code doesn't build when I separate compilation and linking

本文关键字:代码 构建 链接 分离 编译      更新时间:2023-10-16

我有一个名为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

代码构建完美,可执行的"加密"被创建。 但是,当我像这样将编译和链接分开时:

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++.alibstdc++.so并且该库以某种方式损坏,或者只是由于某些(意外(原因而丢失了::operator delete

要查看"常规"链接选取了哪些(未损坏的(libstdc++,请执行以下操作:

g++ -o crypto main.o /usr/local/lib/libcryptopp.a -Wl,-y,_ZdlPvm