./a,out:加载共享库和链接时出错 我试图用PARTAUDIO和LIODIOODER编写一个简单的C++程序来播放一首歌,但我没有那么远…
test.cpp./a,out:加载共享库和链接时出错 我试图用PARTAUDIO和LIODIOODER编写一个简单的C++程序来播放一首歌,但我没有那么远…,c++,loading,libraries,C++,Loading,Libraries,test.cpp #include "libs/portaudio/include/portaudio.h" //portaudio #include "libs/libaudiodecoder/include/audiodecoder.h" //libaudiodecoder #include <iostream> #include <string> int main(int argc, char* argv) { std::string filenam
#include "libs/portaudio/include/portaudio.h" //portaudio
#include "libs/libaudiodecoder/include/audiodecoder.h" //libaudiodecoder
#include <iostream>
#include <string>
int main(int argc, char* argv)
{
std::string filename = argv;
AudioDecoderBase tester(filename);
std::cout << "test complete" << std::endl;
return 0;
}
编译(我得到一个与argv类型有关的警告,它应该是char**)
当我运行.out test.mp3时,我得到:
./a.out: error while loading shared libraries: libaudiodecoder.so: cannot
open shared object file: No such file or directory
现在,我在portaudio中也遇到了这个错误,我相信通过设置LD_LIBRARY_PATH=“/usr/local/lib”,然后运行sudo ldconfig,我已经修复了这个错误。我检查了/usr/local/lib,libaudiodecoder.so文件就在那里。所以我很困惑,环境变量被设置(我仔细检查),配置被加载,库文件在正确的目录中
注意:我在写这篇文章时运行了ls/usr/local/lib,只是为了确保库在那里,它在终端中显示为不同的颜色(绿色而不是青色),但是,我不确定这对文件有什么影响
有人知道我如何解决这个问题吗?您的问题是系统没有配置为从/usr/local/lib加载库。GCC使用您提供的路径来查找库,但系统动态加载程序使用自己的路径
您需要转到/etc/ld.so.conf或/etc/ld.so.conf.d并添加/usr/local/lib作为路径。然后运行ldconfig更新库缓存。您指向的是“local/lib”,但您的test.cpp文件正在从名为“libs”的目录中提取库。这可能是问题所在吗?
ldd a.out
显示了什么?通常不同的颜色表示它是不同类型的文件,但确切的含义取决于您的系统。我使用软链接将青色连接到实际的库,这在版本库中经常出现。绿色可能表示它是一个可执行文件。您是否希望向我们展示目录列表的重要部分,即执行:ls-la/usr/lib | grep libaudio
另外:您确实希望将char*argv
更改为char**argv
,并从argv[1]
获取文件名,而不是从argv本身获取,因为argv是所有参数的数组。考虑检查ARCC。扩展@ MVW的注释:请同时显示“代码> LDD/Ur/Studio/LIB/LIB音频解码器。
./a.out: error while loading shared libraries: libaudiodecoder.so: cannot
open shared object file: No such file or directory