我有一个关于用纯c编写库的概念性问题,我有一些函数必须在同一文件夹中的不同程序中使用,所以我正在考虑编写一个库来承载这些函数我必须将整个代码写在一个文件夹中,然后复制到另一台计算机(程序将在其中运行)如果我在此文件夹中创建并编译库,用户是否能够运行程序而不从源代码重新生成库,或者他可能有一些不可预测的错误用户无论如何都会生成使用库的程序,而不会生成库本身。
谢谢
洛伦佐

最佳答案

一般来说,不,它是不可移植的,因为编译后的库可以链接到任意的其他系统上编译后的库必须与目标体系结构、操作系统、编译器系统兼容。
但是您还有另一个选择,从您的评论中得出结论:似乎您还提供了一些shell脚本或makefile来构建程序。
因为库由一组编译后的翻译单元组成,在其中一些单元链接到程序中之前,您可以获取这些翻译单元的源代码集,并在适当的情况下使用每个程序的源代码编译它们。
例如,假设您在3个程序中以不同组合使用了2个函数(每个函数都在自己的源文件中)。”prg1“使用func1(),”prg2“使用func2(),”prg3“同时使用。
这可以是使用(静态)库生成程序的命令:

gcc -c func1.c -o func1.o
gcc -c func2.c -o func2.o
ar -r lib.a func1.o func2.o
gcc prg1.c lib.a -o prg1
gcc prg2.c lib.a -o prg2
gcc prg3.c lib.a -o prg3

直接编译程序源而不是库:
gcc prg1.c func1.c -o prg1
gcc prg2.c func2.c -o prg2
gcc prg3.c func1.c func2.c -o prg3

结果是相同的,至少只要您静态链接到库。
但即使使用共享(动态)库,方法也将是相同的共享库“仅”在多个使用它们的程序同时运行时保存一些RAM如果一次只运行一个程序,动态链接的程序可能需要更多的RAM,加载速度也会慢一些。

关于c - 它是可移植的编译库吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58399494/

10-12 16:58
查看更多