[英]MacOS, c++ python extension cannot find a dynamic library
我正在構建一個 c++ python 擴展。 到目前為止,我為 Linux 和 Windows 創建了版本。目前,我正在努力使用 MacOS 版本。 CMake 產生 2 個庫:
43898860 Aug 29 13:40 libslide_io.dylib
214876 Aug 29 13:40 slideio.cpython-35m-darwin.so
我將它們打包到一個 whl 文件中。 使用 pip 安裝后,當我嘗試導入 package 時,出現以下錯誤:
(sld-35)dist % python -c "import slideio"
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: dlopen(/Users/.../opt/anaconda3/envs/sld-35/lib/python3.5/site-packages/slideio.cpython-35m-darwin.so, 2): Library not loaded: libslide_io.dylib
Referenced from: /Users/.../opt/anaconda3/envs/sld-35/lib/python3.5/site-packages/slideio.cpython-35m-darwin.so
Reason: image not found
兩個庫都正確放置到python環境目錄下:
/Users/.../opt/anaconda3/envs/sld-35/lib/python3.5/site-packages/
此外,如果我解壓縮 whl 文件並從當前目錄導入 package,它就可以工作。
我懷疑它與我的 cmake 文件中的 rpath 設置有關,但找不到正確的解決方案。 我所有的嘗試都失敗了。
我將不勝感激任何幫助。
如果有人感興趣。 我通過使用@loader_path參數執行install_name實用程序來添加構建后解決了這個問題。 該命令指示系統在加載程序(在我的例子中是 python 包)文件夾中查找庫。
if (APPLE)
add_custom_command(TARGET ${BINDLIB_NAME}
POST_BUILD COMMAND
${CMAKE_INSTALL_NAME_TOOL} -change libslide_io.dylib @loader_path/libslide_io.dylib
$<TARGET_FILE:${BINDLIB_NAME}>)
endif()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.