当我想在我的机器上使用 OpenMP 时,我编译了一个 C 程序
gcc -fopenmp
并包括
-lgomp
作为链接器标志。但是,要真正找到 OpenMP.so
文件,我还需要包含 libgomp.so 的路径:
-L/usr/lib/gcc/x86_64-linux-gnu/4.6.3/
显然,这很脆弱,不能跨机器工作。有什么方法可以查询 gcc 以找出它把 libgomp.so 放在哪里?
libgomp.so
是 GCC 支持基础结构的一部分,不打算用作单独的库。-fopenmp
您只需在命令行上指定即可启用 OpenMP 支持并自动链接库。只需使用gcc -fopenmp -o executable file1.o file2.o ...
而不是ld
链接您的可执行文件。
你真的应该让运行时链接器为你找到动态库。如果包含.so
. /etc/ld.so.conf
_ _ _/etc/ld.so.conf.d
ldconfig
.so
如果您想在运行时增加/更改已编译的链接器路径(通过 提供给编译时链接器-L
),则有两个相关的环境变量LD_LIBRARY_PATH
和LD_PRELOAD
:
$ LD_LIBRARY_PATH=/path/to/directory/containing/so ./foo
$ LD_PRELOAD=/path/to/so/to/load.so.0.1.2 ./foo