我一直在尝试使用带有动态库(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
我很困惑,因为该文件确实就在编译目录中。有人可以帮我解释一下吗?
答案 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'参数应该列出头文件的目录,而不是头文件名