Я относительно новичок в C++, поэтому, возможно, мне не хватает некоторых ключевых моментов, касающихся использования ссылок, особенно в таком сложном проекте.
Я могу собрать OpenSSL 3.4.0 хорошо, поскольку нам нужна статически связанная библиотека в POCO, которая, в свою очередь, будет статически связана с нашим двоичным файлом. Однако при сборке и связывании его с POCO 1.13.3 мы получаем 160 неразрешенных внешних символов при связывании POCO::Crypto, причем все они являются символами, которые должны быть предоставлены OpenSSL. Компиляция прошла успешно, но при компоновке произошел сбой.
При этом используются базовые выпуски POCO и OpenSSL из git и используется стандартная установка Visual C++ 2022 со встроенным vcxproj POCO.
| Building C:\project\externals\poco\Crypto\Crypto_vs170.vcxproj
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
&"C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe" C:\project\externals\poco\Crypto\Crypto_vs170.vcxproj /nologo /m /t:rebuild /p:Configuration=release_shared /p:BuildProjectReferences=false /p:Platform=Win32 /p:useenv=True /v:minimal
Cipher.cpp
CipherFactory.cpp
CipherImpl.cpp
CipherKey.cpp
CipherKeyImpl.cpp
CryptoException.cpp
CryptoStream.cpp
CryptoTransform.cpp
DigestEngine.cpp
ECDSADigestEngine.cpp
ECKey.cpp
ECKeyImpl.cpp
Envelope.cpp
EVPCipherImpl.cpp
EVPPKey.cpp
KeyPair.cpp
KeyPairImpl.cpp
OpenSSLInitializer.cpp
PKCS12Container.cpp
RSACipherImpl.cpp
C:\project\externals\poco\Crypto\src\EVPCipherImpl.cpp(172,55): warning C4244: 'argument': conv
ersion from 'std::streamsize' to 'size_t', possible loss of data [C:\project\externals\poco\Cry
pto\Crypto_vs170.vcxproj]
RSADigestEngine.cpp
RSAKey.cpp
RSAKeyImpl.cpp
X509Certificate.cpp
OpenSSL 3.4.0-dev
Creating library ..\lib\PocoCrypto.lib and object ..\lib\PocoCrypto.exp
CipherFactory.obj : error LNK2019: unresolved external symbol _OSSL_PROVIDER_load referenced in function "public: __thi
scall Poco::Crypto::CipherFactory::CipherFactory(void)" (??0CipherFactory@Crypto@Poco@@QAE@XZ) [C:\project\externals\poco\Crypto\Crypto_vs170.vcxproj]
OpenSSLInitializer.obj : error LNK2001: unresolved external symbol _OSSL_PROVIDER_load [C:\project\externals\poco\Crypto\Crypto_vs170.vcxproj]
RSACipherImpl.obj : error LNK2001: unresolved external symbol _EVP_PKEY_type [C:\project\extern
als\poco\Crypto\Crypto_vs170.vcxproj]
RSADigestEngine.obj : error LNK2001: unresolved external symbol _EVP_PKEY_type [C:\project\exte
rnals\poco\Crypto\Crypto_vs170.vcxproj]
RSAKey.obj : error LNK2001: unresolved external symbol _EVP_PKEY_type [C:\project\externals\poc
o\Crypto\Crypto_vs170.vcxproj]
RSAKeyImpl.obj : error LNK2001: unresolved external symbol _EVP_PKEY_type [C:\project\externals
\poco\Crypto\Crypto_vs170.vcxproj]
Envelope.obj : error LNK2001: unresolved external symbol _EVP_PKEY_type [C:\project\externals\p
oco\Crypto\Crypto_vs170.vcxproj]
EVPCipherImpl.obj : error LNK2001: unresolved external symbol _EVP_PKEY_type [C:\project\extern
als\poco\Crypto\Crypto_vs170.vcxproj]
EVPPKey.obj : error LNK2001: unresolved external symbol _EVP_PKEY_type [C:\project\externals\po
co\Crypto\Crypto_vs170.vcxproj]
PKCS12Container.obj : error LNK2001: unresolved external symbol _EVP_PKEY_type [C:\project\exte
rnals\poco\Crypto\Crypto_vs170.vcxproj]
...trimmed for length...
X509Certificate.obj : error LNK2019: unresolved external symbol _BN_bn2hex referenced in function "protected: void __th
iscall Poco::Crypto::X509Certificate::init(void)" (?init@X509Certificate@Crypto@Poco@@IAEXXZ) [C:\project\externals\poco\Crypto\Crypto_vs170.vcxproj]
X509Certificate.obj : error LNK2019: unresolved external symbol _ASN1_STRING_length referenced in function "public: voi
d __thiscall Poco::Crypto::X509Certificate::extractNames(class std::basic_string &,class std::set &)cons
t " (?extractNames@X509Certificate@Crypto@Poco@@QBEXAAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAV
?$set@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$a
llocator@D@2@@std@@@2@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@5@@Z) [C:\project\externals\poco\Crypto\Crypto_vs170.vcxproj]
X509Certificate.obj : error LNK2019: unresolved external symbol _ASN1_STRING_get0_data referenced in function "public:
void __thiscall Poco::Crypto::X509Certificate::extractNames(class std::basic_string &,class std::set &)c
onst " (?extractNames@X509Certificate@Crypto@Poco@@QBEXAAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@
AAV?$set@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@U?$less@V?$basic_string@DU?$char_traits@D@std@@V
?$allocator@D@2@@std@@@2@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@5@@Z) [C:\project\externals\poco\Crypto\Crypto_vs170.vcxproj]
X509Certificate.obj : error LNK2019: unresolved external symbol _ASN1_INTEGER_to_BN referenced in function "protected:
void __thiscall Poco::Crypto::X509Certificate::init(void)" (?init@X509Certificate@Crypto@Poco@@IAEXXZ) [C:\project\externals\poco\Crypto\Crypto_vs170.vcxproj]
X509Certificate.obj : error LNK2019: unresolved external symbol _OBJ_nid2ln referenced in function "public: class std::
basic_string __thiscall Poco::Crypto::X509Certificate::
signatureAlgorithm(void)const " (?signatureAlgorithm@X509Certificate@Crypto@Poco@@QBE?AV?$basic_string@DU?$char_traits@
D@std@@V?$allocator@D@2@@std@@XZ) [C:\project\externals\poco\Crypto\Crypto_vs170.vcxproj]
X509Certificate.obj : error LNK2019: unresolved external symbol _X509_verify referenced in function "public: bool __thi
scall Poco::Crypto::X509Certificate::issuedBy(class Poco::Crypto::X509Certificate const &)const " (?issuedBy@X509Certif
icate@Crypto@Poco@@QBE_NABV123@@Z) [C:\project\externals\poco\Crypto\Crypto_vs170.vcxproj]
X509Certificate.obj : error LNK2019: unresolved external symbol _X509_digest referenced in function "public: class std:
:vector __thiscall Poco::Crypto::X509Certificate::fingerprint(class
std::basic_string const &)const " (?fingerprint@X509Ce
rtificate@Crypto@Poco@@QBE?AV?$vector@EV?$allocator@E@std@@@std@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@
D@2@@5@@Z) [C:\project\externals\poco\Crypto\Crypto_vs170.vcxproj]
X509Certificate.obj : error LNK2019: unresolved external symbol _X509_get_signature_nid referenced in function "public:
class std::basic_string __thiscall Poco::Crypto::X509C
ertificate::signatureAlgorithm(void)const " (?signatureAlgorithm@X509Certificate@Crypto@Poco@@QBE?AV?$basic_string@DU?$
char_traits@D@std@@V?$allocator@D@2@@std@@XZ) [C:\project\externals\poco\Crypto\Crypto_vs170.vc
xproj]
X509Certificate.obj : error LNK2019: unresolved external symbol _X509_get_serialNumber referenced in function "protecte
d: void __thiscall Poco::Crypto::X509Certificate::init(void)" (?init@X509Certificate@Crypto@Poco@@IAEXXZ) [C:\project\externals\poco\Crypto\Crypto_vs170.vcxproj]
X509Certificate.obj : error LNK2019: unresolved external symbol _X509_get_issuer_name referenced in function "protected
: void __thiscall Poco::Crypto::X509Certificate::init(void)" (?init@X509Certificate@Crypto@Poco@@IAEXXZ) [C:\project\externals\poco\Crypto\Crypto_vs170.vcxproj]
X509Certificate.obj : error LNK2019: unresolved external symbol _X509_get_subject_name referenced in function "protecte
d: void __thiscall Poco::Crypto::X509Certificate::init(void)" (?init@X509Certificate@Crypto@Poco@@IAEXXZ) [C:\project\externals\poco\Crypto\Crypto_vs170.vcxproj]
X509Certificate.obj : error LNK2019: unresolved external symbol _X509_get0_notBefore referenced in function "public: cl
ass Poco::DateTime __thiscall Poco::Crypto::X509Certificate::validFrom(void)const " (?validFrom@X509Certificate@Crypto@
Poco@@QBE?AVDateTime@3@XZ) [C:\project\externals\poco\Crypto\Crypto_vs170.vcxproj]
X509Certificate.obj : error LNK2019: unresolved external symbol _X509_get0_notAfter referenced in function "public: cla
ss Poco::DateTime __thiscall Poco::Crypto::X509Certificate::expiresOn(void)const " (?expiresOn@X509Certificate@Crypto@P
oco@@QBE?AVDateTime@3@XZ) [C:\project\externals\poco\Crypto\Crypto_vs170.vcxproj]
X509Certificate.obj : error LNK2019: unresolved external symbol _X509_up_ref referenced in function "public: __thiscall
Poco::Crypto::X509Certificate::X509Certificate(struct x509_st *,bool)" (??0X509Certificate@Crypto@Poco@@QAE@PAUx509_st
@@_N@Z) [C:\project\externals\poco\Crypto\Crypto_vs170.vcxproj]
X509Certificate.obj : error LNK2019: unresolved external symbol _X509_cmp referenced in function "public: bool __thisca
ll Poco::Crypto::X509Certificate::equals(class Poco::Crypto::X509Certificate const &)const " (?equals@X509Certificate@C
rypto@Poco@@QBE_NABV123@@Z) [C:\project\externals\poco\Crypto\Crypto_vs170.vcxproj]
X509Certificate.obj : error LNK2019: unresolved external symbol _X509_NAME_print_ex referenced in function "class std::
basic_string __cdecl Poco::Crypto::_X509_NAME_oneline_u
tf8(struct X509_name_st *)" (?_X509_NAME_oneline_utf8@Crypto@Poco@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$alloca
tor@D@2@@std@@PAUX509_name_st@@@Z) [C:\project\externals\poco\Crypto\Crypto_vs170.vcxproj]
X509Certificate.obj : error LNK2019: unresolved external symbol _X509_NAME_get_text_by_NID referenced in function "publ
ic: class std::basic_string __thiscall Poco::Crypto::X5
09Certificate::issuerName(enum Poco::Crypto::X509Certificate::NID)const " (?issuerName@X509Certificate@Crypto@Poco@@QBE
?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@W4NID@123@@Z) [C:\project\exter
nals\poco\Crypto\Crypto_vs170.vcxproj]
X509Certificate.obj : error LNK2019: unresolved external symbol _X509_get_ext_d2i referenced in function "public: void
__thiscall Poco::Crypto::X509Certificate::extractNames(class std::basic_string &,class std::set &)const
" (?extractNames@X509Certificate@Crypto@Poco@@QBEXAAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAV?$
set@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$all
ocator@D@2@@std@@@2@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@5@@Z) [C:\project\externals\poco\Crypto\Crypto_vs170.vcxproj]
X509Certificate.obj : error LNK2019: unresolved external symbol _PEM_read_bio_X509 referenced in function "protected: v
oid __thiscall Poco::Crypto::X509Certificate::load(class std::basic_istream &)" (?
load@X509Certificate@Crypto@Poco@@IAEXAAV?$basic_istream@DU?$char_traits@D@std@@@std@@@Z) [C:\project\externals\poco\Crypto\Crypto_vs170.vcxproj]
X509Certificate.obj : error LNK2019: unresolved external symbol _PEM_write_bio_X509 referenced in function "public: voi
d __thiscall Poco::Crypto::X509Certificate::save(class std::basic_ostream &)const
" (?save@X509Certificate@Crypto@Poco@@QBEXAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@@Z) [C:\project\externals\poco\Crypto\Crypto_vs170.vcxproj]
X509Certificate.obj : error LNK2019: unresolved external symbol _GENERAL_NAMES_free referenced in function "public: voi
d __thiscall Poco::Crypto::X509Certificate::extractNames(class std::basic_string &,class std::set &)cons
t " (?extractNames@X509Certificate@Crypto@Poco@@QBEXAAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAV
?$set@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$a
llocator@D@2@@std@@@2@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@5@@Z) [C:\project\externals\poco\Crypto\Crypto_vs170.vcxproj]
..\bin\PocoCrypto.dll : fatal error LNK1120: 160 unresolved externals [C:\project\externals\poc
o\Crypto\Crypto_vs170.vcxproj]
ERROR: powershell.exe ./buildwin.ps1 -vs 170 -action rebuild -linkmode all -config both -platform Win32 -tool msbuild -omit \"DNSSD,DNSSD/Avahi,DNSSD/Bonjour,NetSSL_Win,Data/MySQL,Data/PostgreSQL,JWT\" -openssl_base "C:\project/externals/openssl\build\x86\OpenSSL" failed!
Эта система сборки работает на других машинах, но не на этой, и непонятно почему. Чего не хватает, чтобы статически связать эти две библиотеки для проекта? Мой коллега предоставил мне предварительно связанные библиотеки для POCO, но это не позволяет мне постоянно создавать проект с нуля.
EDIT: Подробная команда компоновщика:
EDIT: Подробная команда компоновщика:
EDIT: Подробная команда компоновщика:
EDIT р>
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.40.33807\bin\HostX86\x86\link.exe /ERRORREPORT:QUEUE /OUT:"..\bin\PocoCrypto.dll" /INCREMENTAL:NO /NOLOGO /LIBPATH:..\lib ws2_32.lib iphlpapi.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /PDB :"..\bin\PocoCrypto.pdb" /SUBSYSTEM:CONSOLE /OPT:REF /OPT:ICF /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"..\lib\PocoCrypto.lib" /MACHINE:X86 /SAFESEH /DLL obj\Crypto\release_shared\DLLVersion.res
Подробнее здесь: https://stackoverflow.com/questions/786 ... g-to-opens
POCO 1.13.3 имеет 160 неразрешенных внешних символов при статическом связывании с OpenSSL 3.4.0. ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение