【发布时间】:2009-01-06 19:57:43
【问题描述】:
编辑:我想我应该澄清一下,以防万一。我在 AIX Unix 机器上,所以我使用的是 VAC 编译器——没有 gnu 编译器。 结束编辑
我在 C/C++ 方面相当生疏,如果这是一个简单的问题,请原谅我。
我想从我的一些 C 程序中提取常用函数并将它们放入共享库或共享对象中。如果我在 perl 中执行此操作,我会将我的 subs 放在 perl 模块中,并在需要时使用该模块。
举个例子,假设我有这个功能:
int giveInteger()
{
return 1034;
}
显然这不是一个真实世界的例子,但如果我想分享那个功能,我将如何进行?
我很确定我有两个选择:
- 将我的共享函数放在一个文件中,并让它在编译时与我的主程序一起编译。如果我对共享函数进行了更改,我将不得不重新编译我的主程序。
- 将我的共享函数放在一个文件中,并将其编译为共享库(如果我的条款正确的话),并将我的主程序链接到该共享库。我对共享库所做的任何更改(在编译后)都将在运行时集成到我的主程序中,而无需重新编译我的主程序。
我的想法正确吗?
如果是这样,我该如何完成这两种方法中的一种/两种?我进行了很多搜索,似乎找到了如何将自己的程序链接到其他人的共享库的信息,但没有找到如何创建自己的共享函数并以可以在自己的程序中使用它们的方式编译它们的信息.
非常感谢!
布赖恩
编辑:
结论
感谢大家的帮助!我想我会在这篇文章中添加对我有用的东西(对于 AIX 上的动态共享库),以便其他人可以受益:我编译我的共享函数:
xlc -c sharedFunctions.c -o sharedFunctions.o
然后让它成为一个共享对象:
xlc -qmkshrobj -qexpfile=exportlist sharedFunctions.o
xlc -G -o libsharedFunctions.so sharedFunctions.o -bE:exportlist
然后链接另一个程序:
xlc -brtl -o mainProgram mainProgram.c -L. -lsharedFunctions
另一条评论帮助我找到了这个链接,这也有帮助: http://publib.boulder.ibm.com/infocenter/comphelp/v7v91/topic/com.ibm.vacpp7a.doc/proguide/ref/compile_library.htm
再次感谢所有帮助过我的人!
【问题讨论】:
-
您的命令仅对 C 源代码正确。对于 C++,您应该使用 xlC。在您的两个“使其成为共享对象”命令中,只有第二个实际上在做任何有用的事情(第一个链接 a.out,您忽略它)。
标签: c++ c shared-libraries