对于我的一个Qt嵌入式项目,我正在使用一个名为SMTPEmail的外部Qt库。这个库需要在被包含到项目中之前编译,这是我成功地为Qt 4.8arm和桌面所做的。
我遇到的问题是,当我将头包含到我的项目中并将库包含到.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和Desktop编译lib可以,使用lib为Desktop编译项目可以,但使用lib为ARM编译项目会出错。
this forum thread之后,我怀疑这可能是由于缺少到openssl库文件的链接(在为不同环境编译时,项目指向不同的lib文件夹)。因此,我在编译器ARM(ARM arago linux gnueabi)中搜索了所有与“openssl”相关的文件,并将其包含在.So所在的同一文件夹中;同样的错误。然后我怀疑lib本身有其他依赖项,这些依赖项不在到libs的路径中,所以我做了一个readelf -d libSMTPEmail.so,后来在.so.1中,readelf返回了一些不在库的同一文件夹中的lib依赖项。然后我将所有这些依赖项复制到文件夹中,也没有成功。
那会发生什么呢?我所知道的所有依赖项都已放置到位,而且我仍然只在另一个为ARM编译的项目包含lib的情况下得到错误。

最佳答案

您需要将QMake指向libs和头文件在.pro文件中的位置;
找到你的库在哪里,假设/usr/local/include然后;

INCLUDEPATH += /usr/local/include

添加您将使用的lib;
LIBS += -lSMTPEmail

你可以检查我的答案;

09-20 22:54