对于我的一个 Qt Embedded 项目,我使用了一个名为 SMTPEmail 的外部 Qt 库。这个库在被包含到一个项目之前需要被编译,这是我为 Qt 4.8 ARM 和 Desktop 成功设法做到的。
我遇到的问题是,当我将 header 包含到我的项目中并将库包含在 .pro 中时,链接器会给我
(path_to_libs)/libSMTPEmail.so: undefined reference to `QSslSocket::connectToHostEncrypted(QString const&, unsigned short, QFlags<QIODevice::OpenModeFlag>)'
(path_to_libs)/libSMTPEmail.so: undefined reference to `QSslSocket::QSslSocket(QObject*)'
collect2: ld returned 1 exit status
make: *** [re8k_interface-tgt] Error 1
但仅用于为 ARM 编译。 IOW 为 ARM 和桌面编译库正常,使用该库为桌面编译项目正常,但使用该库为 ARM 编译项目出错。
正在关注 this forum thread我怀疑这可能是由于缺少指向 openssl 库文件的链接(该项目在针对不同环境进行编译时指向不同的 lib 文件夹)。因此,我在 ARM (arm-arago-linux-gnueabi) 编译器中搜索了所有与“openssl”相关的文件,并将其包含在 .so 所在的同一文件夹中;同样的错误。然后我怀疑 lib 本身有其他不在 path_to_libs 中的依赖项,所以我做了一个 readelf -d libSMTPEmail.so
然后在 .so.1
和 readelf确实返回了一些不在库的同一文件夹内的 lib 依赖项。然后我将所有此类依赖项复制到该文件夹,但也没有成功。
那么会发生什么?我知道的所有依赖项都已到位,但我仍然只在 lib 被另一个为 ARM 编译的项目包含的情况下收到错误。
最佳答案
您需要将您的 QMake 指向您的库和头文件在您的 .pro
文件中的位置;
所以找到你的图书馆在哪里假设/usr/local/include
然后;
INCLUDEPATH += /usr/local/include
添加您将使用的库;
LIBS += -lSMTPEmail
可以查看我的回答here ;
关于linux - 为 ARM 使用 lib 时获取 "undefined reference to",但在编译时获取 0x104567910,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34201276/