c - 它是可移植的编译库吗?

标签 c static-libraries portability

我有一个关于用普通 c 编写库的概念性问题。我有一些功能必须在同一个文件夹中的不同程序中使用,所以我正在考虑编写一个库来承载这些功能。我必须将整个代码写在一个文件夹中,该文件夹将被复制到另一台计算机(程序将在其中运行)。如果我在此文件夹中创建和编译库,用户是否可以在不从源代码重建库的情况下运行程序,或者他可能会遇到一些不可预测的错误?无论如何,用户将构建使用库的程序,而不是构建库本身。

谢谢

洛伦佐

最佳答案

一般来说,,从编译库可以链接到任意其他系统的意义上说,它是不可移植的。编译后的库必须与目标架构、操作系统、编译器系统等兼容。


但您还有另一种选择,从您的评论得出结论:您似乎还提供了一些 shell 脚本或 makefile 来构建程序。

因为库“仅”由一组已编译的翻译单元组成,然后它们中的一些链接到程序中,您可以获取这些翻译单元的源集,并在适当的情况下将它们与每个程序的源一起编译.

例如,假设您有 2 个函数(每个函数都在其自己的源文件中),您在 3 个程序中以不同的组合使用它们。 “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/

相关文章:

c - 这个二维字符数组的字符输入有什么问题?为什么它不接受 K*K 输入的总数?

c - 0..9 约束在 GCC 内联汇编中有什么作用?

windows - 使用静态库 libcurl.lib 构建程序

c - 为枚举分配类型是标准 C 语言吗?

linux - 在 linux 上编译 fortran 程序并将可执行文件移动到另一台 linux 机器

c - MPI_Recv : Receiving a different size than the one Sent

c - 什么时候将值隐式转换为指针?

c++ - 错误 LNK2019 和 fatal error LNK1120 : 2 unresolved externals

c++ - 单个进程如何处理链接到同一库的多个共享库?

path - cmake:unix上的默认包含路径