gcc - 图书馆找不到 libgomp.1.dylib,尽管它存在
问题描述
我正在尝试在我的 M1 MacBook 上构建 OpenSfM。我通过 MacPorts 安装了 GCC11、Ceres 和 OpenCV。我需要/opt/local/lib
手动添加到 OpenSfM CMakeLists.txt
,因为 setuptools 不知何故找不到 ceres.h,但之后编译 OpenSfM 工作正常。
当我后来运行一个使用 OpenSfM 的程序时,它失败了:
Traceback (most recent call last):
File "/Users/pvitt/projects/odm/./run.py", line 19, in <module>
from stages.odm_app import ODMApp
File "/Users/pvitt/projects/odm/stages/odm_app.py", line 10, in <module>
from stages.run_opensfm import ODMOpenSfMStage
File "/Users/pvitt/projects/odm/stages/run_opensfm.py", line 14, in <module>
from opendm.osfm import OSFMContext
File "/Users/pvitt/projects/odm/opendm/osfm.py", line 14, in <module>
from opensfm.large import metadataset
File "/opt/local/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/opensfm-0.5.2-py3.9.egg/opensfm/large/metadataset.py", line 7, in <module>
from opensfm import io
File "/opt/local/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/opensfm-0.5.2-py3.9.egg/opensfm/io.py", line 11, in <module>
from opensfm import context, features, geo, pygeometry, pymap, types
File "/opt/local/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/opensfm-0.5.2-py3.9.egg/opensfm/features.py", line 9, in <module>
from opensfm import context, pyfeatures
ImportError: dlopen(/opt/local/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/opensfm-0.5.2-py3.9.egg/opensfm/pyfeatures.cpython-39-darwin.so, 2): Library not loaded: @rpath/libgomp.1.dylib
Referenced from: /opt/local/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/opensfm-0.5.2-py3.9.egg/opensfm/pyfeatures.cpython-39-darwin.so
Reason: image not found
看一看/opt/local/lib/
告诉我有一个libgomp.1.dylib
:
% ls -al /opt/local/lib/gcc11/libgomp.1.dylib
lrwxr-xr-x 1 root admin 37 May 16 00:57 /opt/local/lib/gcc11/libgomp.1.dylib -> /opt/local/lib/libgcc/libgomp.1.dylib
% ls -al /opt/local/lib/libgcc/libgomp.1.dylib
-rwxr-xr-x 1 root admin 245120 May 16 00:24 /opt/local/lib/libgcc/libgomp.1.dylib
[编辑] 因为我的 CPU 架构是 ARM,所以我需要为这个架构构建工具和库,它们是什么:
% file `which gcc`
/opt/local/bin/gcc: Mach-O 64-bit executable arm64
% file /opt/local/lib/opencv4/libopencv_core.4.5.2.dylib
/opt/local/lib/opencv4/libopencv_core.4.5.2.dylib: Mach-O 64-bit dynamically linked shared library arm64
% file /opt/local/lib/gcc11/libgomp.1.dylib
/opt/local/lib/gcc11/libgomp.1.dylib: Mach-O 64-bit dynamically linked shared library arm64
[/编辑]
所以我想知道错误来自哪里。我在编译过程中做错了吗?我怎样才能找到这个错误的原因?由于我还必须/opt/local/lib
手动添加到CMakeLists.txt
文件中,我怀疑此路径未正确发布。但是,为什么 cmake 不使用 MacPorts 放置所有内容的文件夹呢?我必须手动发布吗?通过CPATH
/ LIBRARY_PATH
?为什么我只能使用 OpenMP:
% cat test_omp.c
#include <stdio.h>
#include <omp.h>
void main() {
#pragma omp parallel
{
printf("Hello World... from thread = %d\n", omp_get_thread_num());
}
}
% gcc -fopenmp test_omp.c
% ./a.out
Hello World... from thread = 1
Hello World... from thread = 3
Hello World... from thread = 2
Hello World... from thread = 5
Hello World... from thread = 4
Hello World... from thread = 6
Hello World... from thread = 0
Hello World... from thread = 7
我担心这真的很愚蠢,但我只是不明白。
解决方案
推荐阅读
- google-analytics - 为什么我的 Google Analytics API 查询恰好返回 1.000.000 行?
- python - 如何将 pandas df 转换为复杂的 json 结构?
- flask - 为什么字典没有用 Flask-Babel 翻译
- python - 我将如何为此创建一个 for 循环?
- android - 为什么我不能通过全局声明对象来访问我的 xml 文件中的组件?
- excel - Office 365 Excel,接收错误代码 1004:应用程序定义或对象定义错误。相关代码太长
- powershell - PowerShell Tee-Object 未捕获文件中的调试行
- google-chrome-extension - 从 chrome 扩展访问 react devtools `$r`
- javascript - 函数返回无效值
- java - 使用 Boxable 在同一 PDF 页面上放置文本和表格时出现问题