Eclipse CDT - 共享库依赖问题

时间:2012-09-13 11:31:04

标签: c linux eclipse eclipse-cdt

我在Eclipse中有两个C共享库项目,名为“MyLibA”和“MyLibB”:

TestA.h

int Test1(void);
int Test2(void);

TestA.c

#include "TestA.h"

int Test1(void) { return 1; }
int Test2(void) { return 2; }

TestB.h

int Test(void);

TestB.c

#include "TestB.h"
#include "TestA.h"

int Test(void) { return Test1() + Test2(); }

“MyLibA”和“MyLibB”分别产生“libMyLibA.so”和“libMyLibB.so”。

我还有一个C可执行项目“MyExe”:

#include "TestB.h"

int main(void)
{
    Test();
    return 0;
}

MyExe的属性已设置,因此它知道在哪里可以找到“TestB.h”和“libMyLibB.so”。它还链接到“MyLibB”。

当我编译“MyExe”时,我收到以下错误并发出警告:

错误:

make: *** [MyExe] Error 1    
recipe for target `MyExe' failed

警告:

libMyLibA.so, needed by libMyLibB.so, not found (try using -rpath or -rpath-link)

如果我修改了MyExe的属性,它们会消失并且MyExe构建文件,以便它知道在哪里找到“libMyLibA.so”并链接到它但这不是理想的。

例如,如果您使用的依赖于许多其他.so文件的.so文件,那么您必须手动链接到它们。

有办法解决这个问题吗?

2 个答案:

答案 0 :(得分:5)

使用-rpath选项。

在Eclipse CDT中,右键单击“MyExe”项目 - >属性 - > C / C ++ Build - >设置 - >工具设置 - > ** C Linker - >其他 - >其他选择

添加

-rpath“libMyLibA.so的路径”

答案 1 :(得分:0)

我在Linux中做过同样的事情(不使用Eclipse,手动通过终端)。工作正常。

应将所有.so文件复制到/ usr / lib位置。如果完成,通过提及库名称本身,将建立链接。

gcc -fPIC -g -c -Wall A.c 
gcc -shared -Wl,-soname, -o libMyLibA.so   A.o

sudo cp libMyLibA.so /usr/lib

gcc -fPIC -g -c -Wall B.c -lMyLibA
gcc -shared -Wl,-soname, -o libMyLibB.so   B.o

sudo cp libMyLibB.so /usr/lib
gcc MyExe.c -lMyLibB -lMyLibA