我使用distutils構建用C++編寫的Python擴展模塊。我遇到的問題是,爲了編譯擴展模塊,我需要鏈接一個特定的共享庫。這需要設置一個額外的編譯器標誌。因此,我通過Python文檔搜索並找出Extension
對象的extra_compile_args
屬性。所以,我試過如下:使用distutils構建Python擴展模塊
from distutils.core import setup, Extension
module = Extension('test', sources = ['test.cpp'])
module.extra_compile_args = ['--std=c++0x', '-l mylib'];
setup(name = 'test', version = '1.0', ext_modules = [module])
這似乎編譯,除非導入我的模塊在Python它拋出一個異常ImportError
由於未定義的符號。所以,顯然圖書館沒有正確鏈接。所以我試着寫了一個與共享庫鏈接的C++程序,它運行良好。然後我意識到事情非常奇怪的是怎麼回事distutils
,因爲如果我添加一個鏈接到一個假的庫名編譯參數,distutils的只是編譯一切都沒有問題:
module.extra_compile_args = ['--std=c++0x', '-l some_fake_library'];
當我運行setup.py build
,構建運行沒有錯誤!
那麼,這是怎麼回事?我如何編譯需要鏈接到共享庫的擴展模塊?