【发布时间】:2019-01-30 17:29:51
【问题描述】:
我用这种方式创建了一个共享库
gcc -I/home/lib 'pkg-config --cflags gtk+-2.0 libxml-2.0' -shared -fPIC -Wl,--export-dynamic file1.c file2.c -o lib.so
它可以工作,并且创建的库也可以满足我的需要。 我想知道的是编译和链接在这个命令字符串中的位置,所以请给我解释一下并告诉我一种将它们划分为两个不同命令的方法,以便更好地理解。 我需要理解这一点,因为我无法解释为什么这个库有效,即使它必须链接到另一个我从未链接到它的库。
【问题讨论】:
-
使用您显示的命令,前端程序
gcc将编译器和链接器作为一个单元调用。还是您的意思是您想知道哪些命令行选项和标志是特定于编译、链接以及两者通用的? -
你没有链接任何东西。
-
@P__J__ 共享库就像可执行程序一样链接。
-
是的,我想知道哪些命令行选项和标志是特定于编译、链接和两者通用的
-
-Wl,是链接器命令选项的开始,您将--export-dynamic作为单个链接器选项。这告诉gcc使用显示的编译器选项编译文件(以及从调用pkg-config生成的那些,然后调用链接器使用链接器选项,--export-dynamic。添加-v以获得详细信息输出,例如gcc -v .....,你会看到所有编译和链接的东西。不像一个简单的汇编程序,你编译成对象,然后简单地调用ld来链接到可执行文件,链接还有很多工作要做使用 C 运行时库。
标签: c gcc shared-libraries