Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.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
C++ 将libpng与g链接++_C++_G++_Libpng - Fatal编程技术网

C++ 将libpng与g链接++

C++ 将libpng与g链接++,c++,g++,libpng,C++,G++,Libpng,我正在尝试让libpng在linux上工作。我无法通过netbeans让它工作,所以我直接以g++-lpng-lzmain.cpp-o测试的形式运行g++并编译它。当我尝试运行它时,它会输出。/test:加载共享库时出错:libpng14.so.14:无法打开共享对象文件:没有这样的文件或目录。我假设这意味着我正在动态链接,它找不到.so文件 ~/Programs/NetBeansProjects/DiamondSquare$ldd测试 LinuxGate.so.1=>0x008a5000 li

我正在尝试让libpng在linux上工作。我无法通过netbeans让它工作,所以我直接以g++-lpng-lzmain.cpp-o测试的形式运行g++并编译它。当我尝试运行它时,它会输出。/test:加载共享库时出错:libpng14.so.14:无法打开共享对象文件:没有这样的文件或目录。我假设这意味着我正在动态链接,它找不到.so文件

~/Programs/NetBeansProjects/DiamondSquare$ldd测试 LinuxGate.so.1=>0x008a5000 libpng14.so.14=>未找到 libz.so.1=>/usr/local/lib/libz.so.1 0x00209000 libstdc++.so.6=>/usr/lib/libstdc++.so.6 0x0094b000 libm.so.6=>/lib/tls/i686/cmov/libm.so.6 0x00e3a000 libgcc_.so.1=>/lib/libgcc_.so.1 0x00927000 libc.so.6=>/lib/tls/i686/cmov/libc.so.6 0x0020000 /lib/ld linux.so.2 0x00b85000

首先,我真的不想动态链接。我如何解决这个问题

我知道libpng14.so.14也在/usr/local/lib中,如果这很重要的话


如果您能告诉我如何在netbeans中执行此操作,请提供额外的注意事项。

动态链接是默认设置,通常应首选。你说libpng在/usr/local/lib中,你真的对此持肯定态度吗?它找到/usr/local/lib/libz.so.1。如果libpng14.so.14也在/usr/local/lib中,它应该也能找到它。

奇怪的是,g++能找到库,但test不能。你可以说g++能找到它,因为即使你只告诉g++'-lpng',test也特别希望libpn14。您确定没有向g++传递任何-L或-R标志吗?您的LD_PRELOAD或LD_LIBRARY_PATH环境变量是否在运行g++的shell中设置,而不是在运行测试的shell中设置?您可以将LD_PRELOAD指向特定的共享库,告诉应用程序或g++如何找到它,并且会自动搜索LD_library_路径中的任何文件夹

还可以链接libpng,静态地将-Wl,-Bstatic放在-lpng之前。注意,-Bstatic之后的任何库都将静态链接。您可以通过使用-Wl,-Bdynamic-lfoo切换回动态并列出更多库。

g++-I/usr/local/include/libpng14-L/usr/local/lib-lpng-lz main.cpp-o测试目前似乎可以实现这一目的。我会调查你说的话。