我用以下方式创建了一个共享库:
(我)创建了一个共享库
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
调用编译器和链接器作为一个整体。或者您是想知道哪些命令行选项和标志是特定于编译、链接以及两者共同使用的? - Some programmer dudegcc
使用显示的编译器选项(以及从调用pkg-config
生成的选项)来编译文件,然后使用链接器选项“--export-dynamic”调用链接器。加上-v
以获得详细输出,例如gcc -v ...
,您将看到编译和链接所需的所有内容。与简单的汇编程序不同,您需要链接C运行时库,需要执行更多操作才能将其编译为目标文件,并简单地调用ld
将其链接到可执行文件中。 - David C. Rankin