簡體   English   中英

macOS,c++ python 擴展找不到動態庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM