Перейти статической библиотеки на Qt5: неопределенные символы для архитектуры x86_64: - PullRequest
1 голос
/ 17 октября 2019

Я использую статическую библиотеку go build в Qt5, я добавляю это в .pro файл с помощью:

LIBS += /Users/xxxx/Desktop/xxxxxx/framework/xxxx.a

И когда я скомпилировал, он выдал мне эту ошибку:

Undefined symbols for architecture x86_64:
  "_SecCertificateCopyNormalizedIssuerContent", referenced from:
      _isRootCertificate in xxxx.a(000021.o)
  "_SecCertificateCopyNormalizedSubjectContent", referenced from:
      _isRootCertificate in xxxx.a(000021.o)
  "_SecCertificateCopyShortDescription", referenced from:
      _CopyPEMRoots in xxxx.a(000021.o)
  "_SecItemExport", referenced from:
      _CopyPEMRoots in xxxx.a(000021.o)
  "_SecPolicyCopyProperties", referenced from:
      _isSSLPolicy in xxxx.a(000021.o)
  "_SecTrustSettingsCopyCertificates", referenced from:
      _CopyPEMRoots in xxxx.a(000021.o)
  "_SecTrustSettingsCopyTrustSettings", referenced from:
      _sslTrustSettingsResult in xxxx.a(000021.o)
  "_kSecPolicyAppleSSL", referenced from:
      _isSSLPolicy in xxxx.a(000021.o)
  "_kSecPolicyOid", referenced from:
      _isSSLPolicy in xxxx.a(000021.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [xxxx.app/Contents/MacOS/xxxx] Error 1
09:27:27: The process "/usr/bin/make" exited with code 2.
Error while building/deploying project xxxx (kit: Desktop Qt 5.13.1 clang 64bit)
When executing step "Make"

Но когда я использую nm xxxx.a, я вижу символы:

xxxx.a(000021.o):
                 U _CFArrayGetCount
                 U _CFArrayGetValueAtIndex
                 U _CFDataAppendBytes
                 U _CFDataCreateMutable
                 U _CFDataGetBytePtr
                 U _CFDataGetLength
                 U _CFDictionaryContainsKey
                 U _CFDictionaryGetValueIfPresent
                 U _CFEqual
                 U _CFNumberGetValue
                 U _CFRelease
                 U _CFStringCreateWithCString
                 U _CFStringGetCString
                 U _CFStringGetLength
                 U _CFStringGetMaximumSizeForEncoding
0000000000000000 T _CopyPEMRoots
                 U _SecCertificateCopyNormalizedIssuerContent
                 U _SecCertificateCopyNormalizedSubjectContent
                 U _SecCertificateCopyShortDescription
                 U _SecItemExport
                 U _SecPolicyCopyProperties
                 U _SecTrustSettingsCopyCertificates
                 U _SecTrustSettingsCopyTrustSettings
                 U ___stack_chk_fail
                 U ___stack_chk_guard
                 U ___stderrp
0000000000000890 T __cgo_0c91096c4ae5_Cfunc_CFDataGetBytePtr
00000000000008f0 T __cgo_0c91096c4ae5_Cfunc_CFDataGetLength
0000000000000950 T __cgo_0c91096c4ae5_Cfunc_CFRelease
0000000000000980 T __cgo_0c91096c4ae5_Cfunc_CopyPEMRoots
                 U __cgo_topofstack
                 U _fprintf
                 U _free
00000000000007e0 t _isRootCertificate
00000000000009f0 t _isSSLPolicy
                 U _kCFAllocatorDefault
                 U _kSecPolicyAppleSSL
                 U _kSecPolicyOid
                 U _malloc
0000000000000540 t _sslTrustSettingsResult
0000000000000c38 s l___const.CopyPEMRoots.domains

Что с ним не так? Как решить эту проблему?
Я попытался clean и запустить qmake. Однако это не сработало.
Я также попытался перекомпилировать статическую библиотеку, К сожалению, она также не работает.

1 Ответ

0 голосов
/ 18 октября 2019

Все символы, упомянутые выше, были в Security фреймворке Apple.
Посмотрите на эту ссылку для более подробной информации: Ссылка .
Я решил это, добавив фрагмент кода ниже в моем .pro file.

macx {
    LIBS += -framework Security
}

Очистите все, запустите qmake и запустите его. Теперь ошибки должны исчезнуть.

...