여기 서문이 있습니다. 저는 C++ + Qt 응용 프로그램을 가지고 있으며 여러 프로젝트로 구성되어 있으며 MSVC 2012를 사용하여 빌드하고 있습니다. 이제 빌드 서버를 배포하기위한 빌드 스크립트를 구현하고 있습니다. 그래서 저는 우리가 가지고있는 프로젝트마다 Qt .pro 파일을 만들기 시작했습니다.정적 라이브러리에 종속 된 DLL을 빌드 할 때 링커 오류가 발생합니다. Crypto ++
지금 문제 - 우리는 소스 코드에서 우리가 구축 암호화 ++ 라이브러리 (http://www.cryptopp.com/)를 사용하고, 출력은 정적 lib 디렉토리이며, 우리는 cryptlib.lib에 따라 DLL이있다.
나는 Cryptlib에 대한 .PRO 파일을 작성하고 난 내 DLL에 대한 .PRO 파일을 작성
QT -= core gui
QMAKE_CFLAGS += /Zc:wchar_t
TEMPLATE = lib
TARGET = cryptlib
Release:DESTDIR = ./Release
Debug:DESTDIR = ./Debug
CONFIG += staticlib precompile_header
DEFINES += _USING_V110_SDK71_ WINVER=0x0501 WIN32 _WINDOWS _MBCS
DEFINES -= UNICODE
PRECOMPILED_HEADER = pch.h
DEPENDPATH += .
include(CryptoPP.pri)@
qmake를/JOM를 사용하여 구축 할 수있어 - 그것은 잘 컴파일, 하지만 링커 받고 있어요 연결 단계의 오류. 가장 흥미로운 점은 MSVC2012와 으로 cryptlib을 빌드 할 때 qmake로 DLL을 빌드하면 OK입니다.
무엇이 잘못 될 수 있습니까? MSVC 프로젝트의 모든 proj 설정을 확인하고 내 pro 파일에 적용했습니다. 나는 MSVC와 QT로 빌드 된 libs에서 mangling되는 이름을 확인했다 - mangled 이름은 똑같아 보인다. 지금은 우리가 DLL에 대한 설정을 CryptLib
에 대한
*Compiler:* /Yu"pch.h" /GS /GL /analyze- /W3 /Gy- /Zc:wchar_t /Zi /Gm- /O2 /Ob2 /Fd"Release\vc110.pdb" /fp:precise /Zp1 /D "_USING_V110_SDK71_" /D "NDEBUG" /D "_WINDOWS" /D "USE_PRECOMPILED_HEADERS" /D "WIN32" /D "WINVER=0x0501" /D "_VC80_UPGRADE=0x0710" /errorReport:prompt /GF- /WX- /Zc:forScope /arch:SSE /Gd /Oy /Oi /MD /Fa"Release\" /EHsc /nologo /Fo"Release\" /Fp"Release\cryptlib.pch"
*Linker:* /OUT:"SecretPath\CryptoPP\Release\cryptlib.lib" /LTCG /NOLOGO
을 다음과 같은 설정이 여기에 있습니다 MSVC2012에서
@# ----------------------------------------------------
# This file is generated by the Qt Visual Studio Add-in.
# ------------------------------------------------------
QT -= gui core
QMAKE_CFLAGS += /Zc:wchar_t
TEMPLATE = lib
TARGET = PSGLicensing
Release:DESTDIR = ./Release
Debug:DESTDIR = ./Debug
CONFIG += dll
DEFINES += _AFXDLL _USING_V110_SDK71_ WIN32 _WINDOWS _WINDLL _USRDLL DLL_LIBRARY PSGLICENSING_DLL_BUILD _MBCS _VC80_UPGRADE=0x0710
DEFINES -= UNICODE
PRECOMPILED_HEADER = stdafx.h
DEPENDPATH += .
win32:CONFIG(release, debug|release): LIBS += -L$$_PRO_FILE_PWD_/../CryptoPP/Release/ -lcryptlib
else:win32:CONFIG(debug, debug|release): LIBS += -L$$_PRO_FILE_PWD_/../CryptoPP/Debug/ -lcryptlib
INCLUDEPATH += $$_PRO_FILE_PWD_/../CryptoPP/
DEPENDPATH += $$_PRO_FILE_PWD_/../CryptoPP/
win32:CONFIG(release, debug|release): PRE_TARGETDEPS += $$_PRO_FILE_PWD_/../CryptoPP/Release/cryptlib.lib
else:win32:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$_PRO_FILE_PWD_/../CryptoPP/Debug/cryptlib.lib
include(PSGLicensing.pri)@
을 붙어있어 여기
*Compiler*: /Yu"stdafx.h" /GS /analyze- /W3 /Zc:wchar_t /I"SecretPath\PSGLicensing\IncludeExp" /Zi /Gm- /O2 /Fd"Release\vc110.pdb" /fp:precise /D "_USING_V110_SDK71_" /D "WIN32" /D "_WINDOWS" /D "NDEBUG" /D "_USRDLL" /D "PSGLICENSING_DLL_BUILD" /D "_VC80_UPGRADE=0x0710" /D "_WINDLL" /D "_MBCS" /D "_AFXDLL" /errorReport:prompt /WX- /Zc:forScope /Gd /Oy- /MD /Fa"Release\" /EHsc /nologo /Fo"Release\" /Fp"Release\PSGLicensing.pch"
*Linker:* /OUT:"SecretPah\PSGLicensing\Release\PSGLicensing.dll" /MANIFEST /PDB:"SecretPath\PSGLicensing\Release\PSGLicensing.pdb" /DYNAMICBASE:NO "..\CryptoPP\Release\cryptlib.lib" "SecretPath\CryptoPP\Release\cryptlib.lib" /DEF:".\PSGLicensing.def" /IMPLIB:"SecretPath\PSGLicensing\Release\PSGLicensing.lib" /DEBUG /DLL /MACHINE:X86 /OPT:REF /SAFESEH /INCREMENTAL:NO /PGD:"SecretPath\PSGLicensing\Release\PSGLicensing.pgd" /SUBSYSTEM:WINDOWS",5.01" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"Release\PSGLicensing.dll.intermediate.manifest" /OPT:ICF /ERRORREPORT:PROMPT /NOLOGO /TLBID:1
은 JOM입니다 외출 ut
@ C:\Qt\Qt5.2.1\Tools\QtCreator\bin\jom.exe -f Makefile.Release
link /NOLOGO /DYNAMICBASE /NXCOMPAT /INCREMENTAL:NO /DLL /MANIFEST /MANIFESTFILE:Release\PSGLicensing.dll.embed.manifest /OUT:Release\PSGLicensing.dll @C:\Users\ANDRIY~1.GLO\AppData\Local\Temp\PSGLicensing.dll.6212.16.jom
Creating library Release\PSGLicensing.lib and object Release\PSGLicensing.exp
GenerateRandomBlock.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall CryptoPP::CFB_CipherTemplate<class CryptoPP::AbstractPolicyHolder<class CryptoPP::CFB_CipherAbstractPolicy,class CryptoPP::CFB_ModePolicy> >::ProcessData(unsigned char *,unsigned char const *,unsigned int)" ([email protected][email protected][email protected][email protected]@@[email protected]@@[email protected]@@[email protected]@[email protected])
GenerateRandomBlock.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall CryptoPP::CFB_CipherTemplate<class CryptoPP::AbstractPolicyHolder<class CryptoPP::CFB_CipherAbstractPolicy,class CryptoPP::CFB_ModePolicy> >::Resynchronize(unsigned char const *,int)" ([email protected][email protected][email protected][email protected]@@[email protected]@@[email protected]@@[email protected]@[email protected])
GenerateRandomBlock.obj : error LNK2001: unresolved external symbol "protected: virtual void __thiscall CryptoPP::CFB_CipherTemplate<class CryptoPP::AbstractPolicyHolder<class CryptoPP::CFB_CipherAbstractPolicy,class CryptoPP::CFB_ModePolicy> >::UncheckedSetKey(unsigned char const *,unsigned int,class CryptoPP::NameValuePairs const &)" ([email protected]?$CF[email protected][email protected][email protected]@@[email protected]@@[email protected]@@[email protected]@[email protected]@@Z)
GenerateRandomBlock.obj : error LNK2001: unresolved external symbol "private: virtual void __thiscall CryptoPP::CFB_EncryptionTemplate<class CryptoPP::AbstractPolicyHolder<class CryptoPP::CFB_CipherAbstractPolicy,class CryptoPP::CFB_ModePolicy> >::CombineMessageAndShiftRegister(unsigned char *,unsigned char *,unsigned char const *,unsigned int)" ([email protected][email protected][email protected][email protected]@@[email protected]@@[email protected]@@[email protected]@[email protected])
cryptlib.lib(rsa.obj) : error LNK2001: unresolved external symbol "public: virtual void __thiscall CryptoPP::IteratedHashBase<unsigned int,class CryptoPP::HashTransformation>::Update(unsigned char const *,unsigned int)" ([email protected][email protected]@[email protected]@@[email protected]@[email protected])
LicensingEx.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall CryptoPP::IteratedHashBase<unsigned int,class CryptoPP::HashTransformation>::Update(unsigned char const *,unsigned int)" ([email protected][email protected]@[email protected]@@[email protected]@[email protected])
cryptlib.lib(randpool.obj) : error LNK2001: unresolved external symbol "public: virtual void __thiscall CryptoPP::IteratedHashBase<unsigned int,class CryptoPP::HashTransformation>::Update(unsigned char const *,unsigned int)" ([email protected][email protected]@[email protected]@@[email protected]@[email protected])
cryptlib.lib(md5.obj) : error LNK2001: unresolved external symbol "public: virtual void __thiscall CryptoPP::IteratedHashBase<unsigned int,class CryptoPP::HashTransformation>::Update(unsigned char const *,unsigned int)" ([email protected][email protected]@[email protected]@@[email protected]@[email protected])
cryptlib.lib(integer.obj) : error LNK2001: unresolved external symbol "public: virtual void __thiscall CryptoPP::IteratedHashBase<unsigned int,class CryptoPP::HashTransformation>::Update(unsigned char const *,unsigned int)" ([email protected][email protected]@[email protected]@@[email protected]@[email protected])
cryptlib.lib(rsa.obj) : error LNK2001: unresolved external symbol "public: virtual unsigned char * __thiscall CryptoPP::IteratedHashBase<unsigned int,class CryptoPP::HashTransformation>::CreateUpdateSpace(unsigned int &)" ([email protected][email protected]@[email protected]@@[email protected]@[email protected])
LicensingEx.obj : error LNK2001: unresolved external symbol "public: virtual unsigned char * __thiscall CryptoPP::IteratedHashBase<unsigned int,class CryptoPP::HashTransformation>::CreateUpdateSpace(unsigned int &)" ([email protected][email protected]@[email protected]@@[email protected]@[email protected])
cryptlib.lib(randpool.obj) : error LNK2001: unresolved external symbol "public: virtual unsigned char * __thiscall CryptoPP::IteratedHashBase<unsigned int,class CryptoPP::HashTransformation>::CreateUpdateSpace(unsigned int &)" ([email protected][email protected]@[email protected]@@[email protected]@[email protected])
cryptlib.lib(md5.obj) : error LNK2001: unresolved external symbol "public: virtual unsigned char * __thiscall CryptoPP::IteratedHashBase<unsigned int,class CryptoPP::HashTransformation>::CreateUpdateSpace(unsigned int &)" ([email protected][email protected]@[email protected]@@[email protected]@[email protected])
cryptlib.lib(integer.obj) : error LNK2001: unresolved external symbol "public: virtual unsigned char * __thiscall CryptoPP::IteratedHashBase<unsigned int,class CryptoPP::HashTransformation>::CreateUpdateSpace(unsigned int &)" ([email protected][email protected]@[email protected]@@[email protected]@[email protected])
cryptlib.lib(rsa.obj) : error LNK2001: unresolved external symbol "public: virtual void __thiscall CryptoPP::IteratedHashBase<unsigned int,class CryptoPP::HashTransformation>::Restart(void)" ([email protected]?$IteratedHashBase[email protected]@[email protected]@@[email protected]@UAEXXZ)
LicensingEx.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall CryptoPP::IteratedHashBase<unsigned int,class CryptoPP::HashTransformation>::Restart(void)" ([email protected][email protected]@[email protected]@@[email protected]@UAEXXZ)
cryptlib.lib(randpool.obj) : error LNK2001: unresolved external symbol "public: virtual void __thiscall CryptoPP::IteratedHashBase<unsigned int,class CryptoPP::HashTransformation>::Restart(void)" ([email protected][email protected]@[email protected]@@[email protected]@UAEXXZ)
cryptlib.lib(md5.obj) : error LNK2001: unresolved external symbol "public: virtual void __thiscall CryptoPP::IteratedHashBase<unsigned int,class CryptoPP::HashTransformation>::Restart(void)" ([email protected][email protected]@[email protected]@@[email protected]@UAEXXZ)
cryptlib.lib(integer.obj) : error LNK2001: unresolved external symbol "public: virtual void __thiscall CryptoPP::IteratedHashBase<unsigned int,class CryptoPP::HashTransformation>::Restart(void)" ([email protected][email protected]@[email protected]@@[email protected]@UAEXXZ)
cryptlib.lib(rsa.obj) : error LNK2001: unresolved external symbol "public: virtual void __thiscall CryptoPP::IteratedHashBase<unsigned int,class CryptoPP::HashTransformation>::TruncatedFinal(unsigned char *,unsigned int)" ([email protected][email protected]@[email protected]@@[email protected]@[email protected])
LicensingEx.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall CryptoPP::IteratedHashBase<unsigned int,class CryptoPP::HashTransformation>::TruncatedFinal(unsigned char *,unsigned int)" ([email protected][email protected]@[email protected]@@[email protected]@[email protected])
cryptlib.lib(randpool.obj) : error LNK2001: unresolved external symbol "public: virtual void __thiscall CryptoPP::IteratedHashBase<unsigned int,class CryptoPP::HashTransformation>::TruncatedFinal(unsigned char *,unsigned int)" ([email protected][email protected]@[email protected]@@[email protected]@[email protected])
cryptlib.lib(md5.obj) : error LNK2001: unresolved external symbol "public: virtual void __thiscall CryptoPP::IteratedHashBase<unsigned int,class CryptoPP::HashTransformation>::TruncatedFinal(unsigned char *,unsigned int)" ([email protected][email protected]@[email protected]@@[email protected]@[email protected])
cryptlib.lib(integer.obj) : error LNK2001: unresolved external symbol "public: virtual void __thiscall CryptoPP::IteratedHashBase<unsigned int,class CryptoPP::HashTransformation>::TruncatedFinal(unsigned char *,unsigned int)" ([email protected][email protected]@[email protected]@@[email protected]@[email protected])
LicensingEx.obj : error LNK2001: unresolved external symbol "protected: virtual unsigned int __thiscall CryptoPP::IteratedHashBase<unsigned int,class CryptoPP::HashTransformation>::HashMultipleBlocks(unsigned int const *,unsigned int)" ([email protected][email protected]@[email protected]@@[email protected]@[email protected])
cryptlib.lib(md5.obj) : error LNK2001: unresolved external symbol "protected: virtual unsigned int __thiscall CryptoPP::IteratedHashBase<unsigned int,class CryptoPP::HashTransformation>::HashMultipleBlocks(unsigned int const *,unsigned int)" ([email protected][email protected]@[email protected]@@[email protected]@[email protected])
cryptlib.lib(integer.obj) : error LNK2001: unresolved external symbol "protected: virtual unsigned int __thiscall CryptoPP::IteratedHashBase<unsigned int,class CryptoPP::HashTransformation>::HashMultipleBlocks(unsigned int const *,unsigned int)" ([email protected][email protected]@[email protected]@@[email protected]@[email protected])
cryptlib.lib(rsa.obj) : error LNK2001: unresolved external symbol "protected: virtual unsigned int __thiscall CryptoPP::IteratedHashBase<unsigned int,class CryptoPP::HashTransformation>::HashMultipleBlocks(unsigned int const *,unsigned int)" ([email protected][email protected]@[email protected]@@[email protected]@[email protected])
cryptlib.lib(integer.obj) : error LNK2001: unresolved external symbol "public: virtual class CryptoPP::Integer __thiscall CryptoPP::AbstractGroup<class CryptoPP::Integer>::ScalarMultiply(class CryptoPP::Integer const &,class CryptoPP::Integer const &)const " ([email protected][email protected]@[email protected]@@[email protected]@[email protected]@[email protected]@Z)
cryptlib.lib(rsa.obj) : error LNK2001: unresolved external symbol "public: virtual class CryptoPP::Integer __thiscall CryptoPP::AbstractGroup<class CryptoPP::Integer>::ScalarMultiply(class CryptoPP::Integer const &,class CryptoPP::Integer const &)const " ([email protected][email protected]@[email protected]@@[email protected]@[email protected]@[email protected]@Z)
cryptlib.lib(integer.obj) : error LNK2001: unresolved external symbol "public: virtual class CryptoPP::Integer __thiscall CryptoPP::AbstractGroup<class CryptoPP::Integer>::CascadeScalarMultiply(class CryptoPP::Integer const &,class CryptoPP::Integer const &,class CryptoPP::Integer const &,class CryptoPP::Integer const &)const " ([email protected][email protected]@[email protected]@@[email protected]@[email protected]@[email protected]@Z)
cryptlib.lib(rsa.obj) : error LNK2019: unresolved external symbol "public: virtual class CryptoPP::Integer __thiscall CryptoPP::AbstractGroup<class CryptoPP::Integer>::CascadeScalarMultiply(class CryptoPP::Integer const &,class CryptoPP::Integer const &,class CryptoPP::Integer const &,class CryptoPP::Integer const &)const " ([email protected][email protected]@[email protected]@@[email protected]@[email protected]@[email protected]@Z) referenced in function "public: class CryptoPP::GetValueHelperClass<class CryptoPP::InvertibleRSAFunction,class CryptoPP::RSAFunction> & __thiscall CryptoPP::GetValueHelperClass<class CryptoPP::InvertibleRSAFunction,class CryptoPP::RSAFunction>::operator()<class CryptoPP::Integer>(char const *,class CryptoPP::Integer const & (__thiscall CryptoPP::InvertibleRSAFunction::*)(void)const)" ([email protected]@@@[email protected]@[email protected]@[email protected]@@[email protected]@[email protected]@[email protected]@[email protected]@Z)
cryptlib.lib(integer.obj) : error LNK2001: unresolved external symbol "public: virtual void __thiscall CryptoPP::AbstractGroup<class CryptoPP::Integer>::SimultaneousMultiply(class CryptoPP::Integer *,class CryptoPP::Integer const &,class CryptoPP::Integer const *,unsigned int)const " ([email protected][email protected]@[email protected]@@[email protected]@[email protected]@[email protected]@[email protected])
cryptlib.lib(rsa.obj) : error LNK2019: unresolved external symbol "public: virtual void __thiscall CryptoPP::AbstractGroup<class CryptoPP::Integer>::SimultaneousMultiply(class CryptoPP::Integer *,class CryptoPP::Integer const &,class CryptoPP::Integer const *,unsigned int)const " ([email protected][email protected]@[email protected]@@[email protected]@[email protected]@[email protected]@[email protected]) referenced in function "public: void __thiscall CryptoPP::InvertibleRSAFunction::Initialize(class CryptoPP::Integer const &,class CryptoPP::Integer const &,class CryptoPP::Integer const &)" ([email protected]@[email protected]@[email protected]@[email protected])
cryptlib.lib(integer.obj) : error LNK2019: unresolved external symbol "public: virtual class CryptoPP::Integer __thiscall CryptoPP::AbstractRing<class CryptoPP::Integer>::Exponentiate(class CryptoPP::Integer const &,class CryptoPP::Integer const &)const " ([email protected][email protected]@[email protected]@@[email protected]@[email protected]@[email protected]@Z) referenced in function "class CryptoPP::Integer __cdecl CryptoPP::a_exp_b_mod_c(class CryptoPP::Integer const &,class CryptoPP::Integer const &,class CryptoPP::Integer const &)" ([email protected]@@[email protected]@[email protected]@Z)
cryptlib.lib(rsa.obj) : error LNK2001: unresolved external symbol "public: virtual class CryptoPP::Integer __thiscall CryptoPP::AbstractRing<class CryptoPP::Integer>::Exponentiate(class CryptoPP::Integer const &,class CryptoPP::Integer const &)const " ([email protected][email protected]@[email protected]@@[email protected]@[email protected]@[email protected]@Z)
cryptlib.lib(integer.obj) : error LNK2019: unresolved external symbol "public: virtual class CryptoPP::Integer __thiscall CryptoPP::AbstractRing<class CryptoPP::Integer>::CascadeExponentiate(class CryptoPP::Integer const &,class CryptoPP::Integer const &,class CryptoPP::Integer const &,class CryptoPP::Integer const &)const " ([email protected][email protected]@[email protected]@@[email protected]@[email protected]@[email protected]@Z) referenced in function "public: virtual class CryptoPP::Integer __thiscall CryptoPP::ModularArithmetic::CascadeExponentiate(class CryptoPP::Integer const &,class CryptoPP::Integer const &,class CryptoPP::Integer const &,class CryptoPP::Integer const &)const " ([email protected]@[email protected]@[email protected]@[email protected]@Z)
cryptlib.lib(integer.obj) : error LNK2019: unresolved external symbol "public: virtual void __thiscall CryptoPP::AbstractRing<class CryptoPP::Integer>::SimultaneousExponentiate(class CryptoPP::Integer *,class CryptoPP::Integer const &,class CryptoPP::Integer const *,unsigned int)const " ([email protected][email protected]@[email protected]@@[email protected]@[email protected]@[email protected]@[email protected]) referenced in function "public: virtual void __thiscall CryptoPP::ModularArithmetic::SimultaneousExponentiate(class CryptoPP::Integer *,class CryptoPP::Integer const &,class CryptoPP::Integer const *,unsigned int)const " ([email protected]@[email protected]@[email protected]@[email protected]@[email protected])
cryptlib.lib(integer.obj) : error LNK2001: unresolved external symbol "public: virtual class CryptoPP::Integer const & __thiscall CryptoPP::AbstractEuclideanDomain<class CryptoPP::Integer>::Gcd(class CryptoPP::Integer const &,class CryptoPP::Integer const &)const " ([email protected][email protected]@[email protected]@@[email protected]@[email protected]@[email protected]@Z)
Release\PSGLicensing.dll : fatal error LNK1120: 16 unresolved externals
@
이 문제는 해결책이 아니지만 CMake로 전환하는 것이 좋습니다. 삶을 훨씬 편하게 만듭니다. – juzzlin
먼저, qmake는 컴파일/링크되지 않습니다. Makefile을 만듭니다. link 명령은 전달 된 라이브러리를 가져 오지 않습니다. 그러므로 필요한 기호를 찾지 못할 것입니다. 나는 생성 된 프로파일에서''LIBS + = ...''을 보지 않을 것이며, msv-studio의 필수 라이브러리에 암호화 라이브러리를 추가해야합니까? –
@juzzlin 쉽게는 주관적인 관점입니다. 전체 인프라가 qmake 및 전통적인 설정을 기반으로 구축되는 경우 cmake를 사용하는 것이 많은 작업입니다. 그것은 또한 cmake를 읽어야합니다. 나는 현재 전통적인 설정을 선호하며 나는 cmake를 설치하도록 강요 당하면 항상 화가 난다. –