繁体   English   中英

在MacOS QT项目中链接Dylib

[英]Link dylib in macOs QT project

我在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:该过程被强制结束。

/Users/ingoforster/Documents/Development/Playground/build-TestGround-Desktop_Qt_5_9_1_clang_64bit-Debug/TestGround.app/Contents/MacOS/TestGround似乎已编译链接到您的库代码,但可能尚未正式安装到可执行文件。 macdeployqt通常处理此问题。 您也可以使用otoolinstall_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

经过一番艰苦的调查,并在错误的方向上给出了给出的答案,我发现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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM