2017-06-01 45 views
0

我試圖在我的C++項目中嵌入python。我需要這樣做才能使用一些實現Kolmogorov-Smirnov測試的功能,這些功能在C++中不可用。設置Xcode標誌爲了在我的C++項目中嵌入python

現在我只想看看Xcode是否能夠鏈接和編譯嵌入Python的簡單程序。 我試圖編譯的代碼如下:

#include<Python/Python.h> 

int main(int argc, const char * argv[]) { 

    Py_Initialize(); 
    PyObject* variable; 
    Py_Finalize(); 
    return 0; 
} 

據我可以從我在這裏閱讀說明書瞭解:1. Embedding Python in Another Application - 1.6 Compiling and Linking under Unix-like systems這裏:Python/C API Reference Manual - Introduction爲了這個編譯我要補充編譯器和鏈接器的一些附加標誌。

爲了找出哪些標誌我要補充,我在我的終端上運行以下兩個命令(其中包括我相應的輸出):

$ python3.6-config --cflags   
-I/Users/user/anaconda3/include/python3.6m -I/Users/user/anaconda3/include/python3.6m -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/Users/user/anaconda3/include -arch x86_64 -I/Users/user/anaconda3/include -arch x86_64 

$ python3.6-config --ldflags 
-lpython3.6m -ldl -framework CoreFoundation -Wl,-stack_size,1000000 -framework CoreFoundation 

如果我取代的實際名稱我的用戶文件夾爲user

現在,爲了將這些標誌添加到Xcode編譯器和鏈接器,我進入了我的項目設置窗口,並在Build Settings -> Other C FlagsBuild Settings -> Other Linker Flags下添加了我上面報告的標誌。

但是我編譯時出現此錯誤:

Apple Mach-O Linker (ld) Error Group 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

即使我評論都在main功能除了return 0行它不會消失。

我不明白我在做什麼錯。

我使用Xcode 8.3.2和我的Python分佈爲:Python 3.6.1 |Anaconda 4.4.0

回答

0

好吧,我想我已經找到了解決辦法。不知道它是否真的是正確的(因爲我不是專家,我不明白爲什麼它現在可以工作),但我會發布它。

的事情是,如果你看一下這個頁面的說明:1. Embedding Python in Another Application - 1.6. Compiling and Linking under Unix-like systems你可以看到,在執行命令時python3.6-config --ldflags輸出包含一個標誌-L/opt/lib/python3.4/config-3.4m,而在我的情況下,它沒有。

因此,在弄清楚給我鏈接錯誤的標誌是-lpython3.6m後,我想這可能是因爲鏈接程序找不到我的python發行版的目錄或類似的東西。

因此,我在我的硬盤驅動器中查找名稱與網頁上顯示的名稱類似的文件夾的路徑,並且我發現/Users/user/anaconda3/lib/python3.6/config-3.6m-darwin是一個名稱與我正在查找的名稱非常相似的文件夾的路徑因爲除了在文件夾名稱末尾的「-darwin」,可能是因爲我在macOS發行版中(可能這就是爲什麼命令python3.6-config --ldflags沒有找到它?我不知道)。

在此之後,我剛剛在Xcode的「其他Liker標誌」的開頭添加了-L/Users/user/anaconda3/lib/python3.6/config-3.6m-darwin,並且所有(幾乎)編譯都很好。

我說「幾乎」是因爲我也不得不通過也許是因爲使用我包括系統默認的Python發行的第一個重命名include在我的代碼開始從#include<Python/Python.h>#include<Python.h>(同時與第二I」包括蟒蛇一個?再次,我不知道)。

無論如何,現在所有東西都編譯得很好,所以我想分享我是如何做到的,以防其他人處於相同的情況。

相關問題