在Ubuntu系统中,使用gcc进行动态编译通常意味着创建一个动态链接库(.so文件)。以下是基本步骤:
hello.c的文件,内容如下:#include <stdio.h>
void hello() {
printf("Hello, World!\n");
}
gcc编译源代码时,需要添加-fPIC选项来生成位置无关代码(Position Independent Code),这是创建共享库所必需的。gcc -fPIC -c hello.c -o hello.o
这里,-c选项告诉gcc只编译源代码并生成目标文件(.o),而不是可执行文件。
3. 创建共享库:
使用gcc将目标文件链接为共享库。
gcc -shared -o libhello.so hello.o
这里,-shared选项告诉gcc创建一个共享库,-o选项指定输出文件的名称(注意,共享库通常以lib开头)。
现在,你应该在当前目录下有一个名为libhello.so的共享库文件。
main.c的文件,内容如下:#include <stdio.h>
void hello(); // 声明外部函数
int main() {
hello();
return 0;
}
然后,使用以下命令编译main.c并链接到libhello.so:
gcc main.c -L. -lhello -o main
这里,-L.告诉gcc在当前目录下查找库文件,-lhello链接到名为libhello.so的库(注意,-l选项后面的库名不需要加lib前缀和.so后缀),-o main指定输出可执行文件的名称。
最后,运行生成的可执行文件:
./main
你应该会看到输出“Hello, World!”。
请注意,为了让系统能够找到共享库,你可能需要将其路径添加到LD_LIBRARY_PATH环境变量中,或者将其安装到系统的标准库路径中。