如何在 hp-ux 中使用 gcc 创建共享库?
How to create shared library with gcc in hp-ux?
我尝试在 hp-ux 上使用 gcc 编译器创建一个共享库。我使用这些命令:
- gcc -Wall -fPIC -std=gnu99 -c *.c
- gcc -shared -Wl -o my_library.so *.o
一切都在没有警告或错误的情况下编译,但是当我尝试使用该库时,出现错误:
错误:扩展加载失败:OS 错误:-1('path_to_lib' 不是有效的加载模块:错误的幻数)。
错误:无法加载扩展:(path_to_lib).
错误:扩展加载失败:OS 错误:-1('path_to_lib' 不是有效的加载模块:错误的幻数)
你知道这个错误到底是什么意思吗?如何解决?
已编辑:
我在 SAS 程序中使用我的共享库是这样的:
proc proto package =work.myfuncs.tests;
link "/home/my_library.so";
int test(int x);
run;
我终于解决了我的问题。我必须使用 gcc 选项 -mlp64
将库创建为 64 位库,因为 SAS 软件是 64 位的。但是,我仍然不知道为什么 proc proto
在 LINUX 上可以正常工作,因为 SAS 软件也是 64b。也许在这两个环境中安装的 gcc 也不同。
我尝试在 hp-ux 上使用 gcc 编译器创建一个共享库。我使用这些命令:
- gcc -Wall -fPIC -std=gnu99 -c *.c
- gcc -shared -Wl -o my_library.so *.o
一切都在没有警告或错误的情况下编译,但是当我尝试使用该库时,出现错误:
错误:扩展加载失败:OS 错误:-1('path_to_lib' 不是有效的加载模块:错误的幻数)。
错误:无法加载扩展:(path_to_lib).
错误:扩展加载失败:OS 错误:-1('path_to_lib' 不是有效的加载模块:错误的幻数)
你知道这个错误到底是什么意思吗?如何解决?
已编辑: 我在 SAS 程序中使用我的共享库是这样的:
proc proto package =work.myfuncs.tests;
link "/home/my_library.so";
int test(int x);
run;
我终于解决了我的问题。我必须使用 gcc 选项 -mlp64
将库创建为 64 位库,因为 SAS 软件是 64 位的。但是,我仍然不知道为什么 proc proto
在 LINUX 上可以正常工作,因为 SAS 软件也是 64b。也许在这两个环境中安装的 gcc 也不同。