我在macOS中尝试了一个简单的dylib,并使用g ++进行了编译。我做了一个小样本来测试lib,它可以完美工作。 现在,我制作了一个简单的QT应用程序,链接了lib,并将标头添加到mainwindow.cpp中,但总是收到失败消息,原因:找不到图像
我在这里阅读了网络以及其他一些案例,但是所有案例都基于路径,我认为这不是路径问题。因为我进行了所有更改,所以在所有情况下我都阅读了该文件,并且还将lib复制到了所有需要的文件夹中,例如项目文件夹,build文件夹。没有任何帮助。
我认为QT无法与库一起使用,并且我错过了一些所需的代码,例如用于初始化或导出。这样问题就出在dylib内部,而不是QT或Paths值中。
也许有人可以帮助我吗?
我尝试过:
INCLUDEPATH += $$PWD/mylib
DEPENDPATH += $$PWD/mylib
macx: LIBS += -L$$PWD/mylib/ -lmylib
我试图将lib复制到build文件夹,也复制到可执行文件夹。
也已编辑:
/Users/ingoforster/Documents/Development/Playground/TestGround/mylib:/Users/ingoforster/Qt/5.9.1/clang_64/lib
in Project settings DYLD_LIBRARY_PATH
Set also to DYLD_FRAMEWORK_PATH
Cpp
#include "mylib.hpp"
char *mMessage(void) {
return "Ein sonniger Tag";
}
标题
#include <stdio.h>
#include <iostream>
using namespace std;
char *mMessage(void);
编译为 g ++ -std = c ++ 0x --verbose -dynamiclib -o libmylib.dylib mylib.cpp
样品
#include "mylib.hpp"
int main(void){
char* Ingo = mMessage();
std::cout << mMessage();
}
编译为 g ++ -std = c ++ 0x test.cpp -L./ -lmylib
实际结果是样本运行完美。 但是在QT中,我得到了:
dyld:库未加载:libmylib.dylib 引用自:/Users/ingoforster/Documents/Development/Playground/build-TestGround-Desktop_Qt_5_9_1_clang_64bit-Debug/TestGround.app/Contents/MacOS/TestGround 原因:找不到图片 10:09:05:程序意外完成。 10:09:05:该过程被强制终止。
答案 0 :(得分:0)
/Users/ingoforster/Documents/Development/Playground/build-TestGround-Desktop_Qt_5_9_1_clang_64bit-Debug/TestGround.app/Contents/MacOS/TestGround
似乎已编译链接到您的库代码,但是可能尚未正式安装到可执行文件中。 macdeployqt
通常会处理此问题。
您也可以使用otool
和install_name_tool
手动执行此操作:
otool -L /path/to/executable
这将列出正在使用的dylib的安装路径。您将看到您的dylib,即“ /old/path/to/libmylib.dylib”
install_name_tool -change /old/path/to/libmylib.dylib /new/path/to/libmylib.dylib /path/to/executable
通常,在.app
中,dylib将安装到.app
文件夹中的子目录中。
Application.app/
Contents/
MacOS/
executable
Frameworks/
libmylib.dylib
使用install_name_tool
,您可以相对于可执行路径指向dylib,以使应用程序具有可移植性。
install_name_tool -change /old/path/to/libmylib.dylib @executable_path/../Frameworks/libmylib.dylib /path/to/executable
答案 1 :(得分:0)
经过一番艰苦的调查,并在错误的方向上给出了给出的答案,我发现QTCreator会自己做:
QTCreator Pro文件必须包含:
macx: LIBS += -L$$PWD/mylib/ -lmylib
INCLUDEPATH += $$PWD/mylib
DEPENDPATH += $$PWD/mylib
MediaFiles.files += mylib/libmylib.dylib
MediaFiles.path = Contents/MacOS
QMAKE_BUNDLE_DATA += MediaFiles