从C:./a.out:/lib/libgcc_.so.1调用Python:version`GCC_7.0.0';未找到(由./a.out所需)
我能够成功编译并链接我的程序,但运行从C:./a.out:/lib/libgcc_.so.1调用Python:version`GCC_7.0.0';未找到(由./a.out所需),python,c,python-3.x,python-c-api,Python,C,Python 3.x,Python C Api,我能够成功编译并链接我的程序,但运行a.out文件会导致: ./a.out: /lib/libgcc_s.so.1: version `GCC_7.0.0' not found (required by ./a.out) ls/lib | grep libgcc的输出为: libgcc_s-4.8.5-20150702.so.1 libgcc_s.so.1 我的GCC版本是4.8.5。我是否缺少一些步骤来强制它使用libgcc_-s-4.8.5-20150702.so.1 我能够编译和运行使
a.out
文件会导致:
./a.out: /lib/libgcc_s.so.1: version `GCC_7.0.0' not found (required by ./a.out)
ls/lib | grep libgcc
的输出为:
libgcc_s-4.8.5-20150702.so.1
libgcc_s.so.1
我的GCC版本是4.8.5。我是否缺少一些步骤来强制它使用libgcc_-s-4.8.5-20150702.so.1
我能够编译和运行使用Python setup.py install
构建的Python C扩展,因此我知道我的GCC版本应该能够做到这一点。然而,现在我正试图构建一个可以运行Python的C应用程序,这会导致这个错误
我有一个小文件,
c.c
:
#include <Python.h>
#include <stdio.h>
int main(void)
{
Py_Initialize();
printf("hello\n");
return 1;
}
~/apps/miniconda3/bin/python3 config--ldflags会产生以下结果:
-I/apps/miniconda3/include/python3.7m -I/apps/miniconda3/include/python3.7m -Wno-unused-result -Wsign-compare -march=prescott -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O3 -pipe -fdebug-prefix-map==/usr/local/src/conda/- -fdebug-prefix-map==/usr/local/src/conda-prefix -fuse-linker-plugin -ffat-lto-objects -flto-partition=none -flto -flto -fuse-linker-plugin -ffat-lto-objects -flto-partition=none -g -DNDEBUG -fwrapv -O3 -Wall
-L/apps/miniconda3/lib/python3.7/config-3.7m-i386-linux-gnu -L/apps/miniconda3/lib -lpython3.7m -lpthread -ldl -lutil -lrt -lm -Xlinker -export-dynamic
我是这样编译的:
gcc -c $(~/apps/miniconda3/bin/python3-config --cflags) -m32 c.c
我是这样链接的:
gcc c.o $(~/apps/miniconda3/bin/python3-config --ldflags) -m32
这两个命令工作时都没有错误或警告,并导致a.out
可执行文件
但是,运行此可执行文件会显示错误消息:
./a.out: /lib/libgcc_s.so.1: version `GCC_7.0.0' not found (required by ./a.out)
我只是猜测一下:miniconda是否附带了
libgcc_.so
?@jordanm在miniconda3/lib目录中我看到了libgcc_.so
和libgcc_.so.1
。同样地,在miniconda3/pkgs/目录中,我看到了一些类似于libgcc-ng-8.2.0-h9268252_1/lib/libgcc_s。因此,如果在运行a.out时将LD_LIBRARY_PATH
设置为miniconda3/lib目录,那么a.out是否有效?@MatthewMoisen在使用GCC编译时可以使用“rpath”参数来设置特定于程序的路径“特定于运行时库的搜索路径”。请尝试使用谷歌搜索一些示例。请注意,“rpath”实际上是一个通过GCC传递的链接器选项。@MatthewMoisen这正是您想要的,是的。