2015-06-20 85 views
1

我想将GNU Coreutils编译为一组共享库,而不是一组可执行文件。我认为make会让我通过一个标志来告诉它做到这一点,但从我所看到的,我实际上必须修改configure.ac和Makefile.am才能完成此工作。我宁愿不这样做,因为这可能会将错误引入代码中,我现在可以依赖于无缺陷的代码。我试图手动输入打开目标文件到这样的:将coretuils编译为共享对象?

make CFLAGS='-fpic' 
gcc -shared -o ls.so coreutils/src/ls.o 

我能够创造这样的文件,但似乎有一个数字,我缺少的标志,我没有看到任何方式访问必要的标志列表来编译和链接代码(即使这些信息明确包含在计算机中)。我能做的唯一事情就是手动检查所有链接器错误,并尝试找出缺失的标志,但我希望获得我想要的内容的方式不那么繁琐。

+3

这样做有什么可能?通过将代码放在'.so'文件中,你不能魔法般地让一个独立的程序表现得像一个库。 –

+0

至少,您必须担心如何在每个程序的共享库中找到/调用main()。通常情况下,你有一个叫做main()的函数。其他名称冲突呢?你还需要担心正确调用'main()' - 是否依赖于'envp'参数(如'int main(int argc,char ** argv,char ** envp)')?它是否使用其他额外的参数? (我相信Mac OS X有额外的额外论据。)像你展示的那样去掉CFLAGS很可能会产生反作用;可能会有相当多的标志因此被从编译器命令行中删除。 –

+0

是不是已经有'coreutils-libs'软件包,并且那里只有'/ usr/lib64/coreutils/libstdbuf.so'文件?这是你正在尝试做什么? – alvits

回答

0

不知道你想做什么,但与此相关的是,所有的对象链接到一个可执行文件中的./configure --enable-单二元期权。