我正在尝试构建一个自包含的可执行文件,我可以在任何/大多数Linux主机上运行。
我知道我可以用容器做到这一点,但是现在我试图静态链接我的exe。
我编译:
g++ -std=c++1y -fopenmp -Ofast -g -march=x86-64 -mtune=generic -m64 -c <source>.cpp -MMD -MP -o <object>.o
并链接:
g++ -std=c++1y -fopenmp -Ofast -g -march=x86-64 -mtune=generic -m64 <list of object files> <list of absolute path to static libs .a> -lpthread -static-libgcc -static-libstdc++ -o exe
它过去工作得很好,但我刚发现它现在在某些主机上打破
error while loading shared libraries: libmvec.so.1: cannot open shared object file: No such file or directory
我不知道代码或系统库是否更新了。我试过(无济于事):
-fopenmp
-lmvec -lm
添加到链接器我的exe
确实是静态关联的:ldd exe
说not a dynamic executable
。但它坚持在运行时加载libmvec.so
:strace exe
说:
据我所知,libmvec是libm的扩展,处理由OpenMP使用的x86向量化。
基本上,我在问是否有办法让它静态工作 - 我看到至少有3个解决方案: