相关疑难解决方法(0)

GCC 4.5与4.4链接依赖关系

在尝试在GCC 4.4和GCC 4.5上执行相同的操作时,我观察到了差异.因为我使用的代码是专有的,我无法提供它,但我观察到这个简单测试用例的类似失败.

我基本上要做的是让一个共享库(libb)依赖于另一个共享库(liba).当加载libb时,我假设也应该加载liba - 即使libb不一定使用liba中的符号.

我观察到的是当我使用GCC 4.4进行编译时,我发现liba已加载,但如果我使用GCC 4.5进行编译,则不会加载libb.

我有一个小测试用例,包含两个文件,ac和bc.文件内容:

//a.c
int a(){ 
    return 0; 
}

//b.c
int b(){
    return 0;
}
//c.c
#include <stdio.h>
int a();
int b();

int main()
{
    printf("%d\n", a()+b());
    return 0;
}
//test.sh    
$CC -o liba.so a.c -shared
$CC -o libb.so b.c -shared -L. -la -Wl,-rpath-link .
$CC c.c -L. -lb -Wl,-rpath-link .
LD_LIBRARY_PATH=. ./a.out
Run Code Online (Sandbox Code Playgroud)

这是我用不同版本的GCC输出的

$ CC=gcc-4.4 ./test.sh
1
$ CC=gcc-4.5 ./test.sh
/tmp/cceJhAqy.o: In function `main':
c.c:(.text+0xf): undefined reference to `a'
collect2: ld returned …
Run Code Online (Sandbox Code Playgroud)

gcc gcc4

8
推荐指数
1
解决办法
3918
查看次数

未定义的符号引用,DSO从命令行中丢失

我正在尝试在Debian Jessie下编译Lotech框架,但我似乎无法通过编译中的特定点.我已经搜索了出现的错误消息,几乎所有这些消息似乎都是通过安装或链接缺少的依赖项来解决的,但我无法弄清楚在这种情况下依赖是什么.

cp buildtmp.linux/liblt.a linux/
cd clients/glfw/ && make LTCFLAGS="-O3 -DNDEBUG -DLTLINUX " && cp ltclient ../../
make[1]: Entering directory `/home/jake/Desktop/copy-lotech-master/clients/glfw'
g++ -O3 -DNDEBUG -DLTLINUX  -I../../linux/include -L../../linux ltclient.cpp \
        -o ltclient -static-libstdc++ -static-libgcc ../../linux/liblt.a ../../linux/libpng.a ../../linux/libz.a ../../linux/liblua.a ../../linux/libvorbis.a ../../linux/libbox2d.a ../../linux/libglfw.a ../../linux/libGLEW.a ../../linux/libopenal.a ../../linux/libcurl.a -lX11 -lGL wrap_memcpy.o -Wl,--wrap=memcpy
/usr/bin/ld: ../../linux/libopenal.a(helpers.o): undefined reference to symbol 'dlclose@@GLIBC_2.2.5'
//lib/x86_64-linux-gnu/libdl.so.2: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make[1]: *** [ltclient] Error 1
make[1]: Leaving directory …
Run Code Online (Sandbox Code Playgroud)

c++ debian compiler-errors

2
推荐指数
1
解决办法
1万
查看次数

标签 统计

c++ ×1

compiler-errors ×1

debian ×1

gcc ×1

gcc4 ×1