Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
./a,out:加载共享库和链接时出错 我试图用PARTAUDIO和LIODIOODER编写一个简单的C++程序来播放一首歌,但我没有那么远…_C++_Loading_Libraries - Fatal编程技术网

./a,out:加载共享库和链接时出错 我试图用PARTAUDIO和LIODIOODER编写一个简单的C++程序来播放一首歌,但我没有那么远…

./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

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 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