一起编译.c源文件和.so动态库

时间:2017-11-30 16:23:04

标签: c gcc shared-libraries

我一直在尝试使用带有动态库(libhello.so)文件的main方法编译C源文件(driver.c),该文件包含main方法中使用的所有函数实现。

我用

制作.so文件
gcc -shared -o libhello.so -fPIC hello.c

编译正常并按预期返回目录中的文件。

然后我尝试使用带有

的动态库libhello.so编译driver.c文件
gcc driver.c libhello.so -o driver

它编译没有抱怨,当我尝试运行可执行文件“驱动程序”时会出现问题。我得到了以下错误:

./driver: error while loading shared libraries: libhello.so: cannot open shared object file: No such file or directory

我很困惑,因为该文件确实就在编译目录中。有人可以帮我解释一下吗?

2 个答案:

答案 0 :(得分:1)

实际上你没有动态链接libhello.so。你需要-l选项。 -lhello 您可以使用ldd驱动程序(您的exec)检查依赖项。

答案 1 :(得分:-1)

关于:

gcc driver.c libhello.so -o driver 

不正确。

它应该类似于:

gcc driver.c -o driver -L. -lhello 

当然,应该有一个包含libhello.so库的所有原型等的头文件

该头文件通常命名为:hello.h,因此最终的compile + link语句为:

gcc driver.c -o driver -I. -L. -lhello <<< edited

我做错了,最后一行,' - I'参数应该列出头文件的目录,而不是头文件名