问题描述
我正在尝试在我的 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",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,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
我担心这真的很愚蠢,但我只是没有看到。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)