首页 > 解决方案 > 图书馆找不到 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

我担心这真的很愚蠢,但我只是不明白。

标签: gcccmakemacports

解决方案


推荐阅读