簡體   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