linux - 为 ARM 使用 lib 时获取 "undefined reference to",但在编译时获取 0x104567910

标签 linux qt shared-libraries undefined-reference .so

对于我的一个 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/

相关文章:

php - 如何使用 php 重启 linux 系统 (Debian)

qt - 如何将信号分配给 QMenu 而不是 Qt 中的 QAction?

c++ - Qt Creator 未定义对现有类的引用

python - 如何使基于 PyO3 的库在 Python 版本之间更具可移植性?

windows - 通过 Windows VS 分区上的虚拟机在 Linux 中进行编码

linux - Openni2运行make时出错

linux - 如何从 Windows 7 使用远程桌面连接到 Amazon Linux 实例?

c++ - 为什么 QCOMPARE(QString ("1"), "1") 会导致链接器错误?

Python Qt+OpenGL 绘图区域错误

php - 调用 php exec() 时未加载共享库