我正在尝试编译链接到Sundown生成的共享库的示例程序.我正在编译程序.
$ gcc -o sd sundown.c -L. -lsundown
Run Code Online (Sandbox Code Playgroud)
然而,当我运行它时,我得到以下错误.
./sd:加载共享库时出错:libsundown.so:无法打开共享对象文件:没有这样的文件或目录
输出ls是.
$ ls
libsundown.so libsundown.so.1 sundown.c sd
Run Code Online (Sandbox Code Playgroud)
为什么找不到共享库ld?
简短解决方案
添加.(或从你的-L旗帜中的任何东西)到你的LD_LIBRARY_PATH.当你运行时sd,它将在标准位置和LD_LIBRARY_PATH中查找库.请注意,自从您添加之后.,只有sd从libsundown.so所在的同一目录运行时,这才有效.
我计划分发已编译的二进制文件.如何在不强制人们编辑LD_LIBRARY_PATH的情况下分发库?
您应该在其中一个标准位置安装libsundown.so,例如/ usr/lib或/ usr/local/lib.您可以使用安装程序或make文件,或者像INSTALL或README这样简单的东西来告诉用户将库粘贴在那里,并确保将权限设置为合理的.