Eclipse CDT - 共享库依赖问题

jpe*_*pen 2 c eclipse linux eclipse-cdt

我在Eclipse中有两个C共享库项目,它们被称为"MyLibA"和"MyLibB":

TestA.h

int Test1(void);
int Test2(void);
Run Code Online (Sandbox Code Playgroud)

TestA.c

#include "TestA.h"

int Test1(void) { return 1; }
int Test2(void) { return 2; }
Run Code Online (Sandbox Code Playgroud)

TestB.h

int Test(void);
Run Code Online (Sandbox Code Playgroud)

TestB.c

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

int Test(void) { return Test1() + Test2(); }
Run Code Online (Sandbox Code Playgroud)

"MyLibA"和"MyLibB"分别产生"libMyLibA.so"和"libMyLibB.so".

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

#include "TestB.h"

int main(void)
{
    Test();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

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

当我编译"MyExe"时,我收到以下错误和警告:

错误:

make: *** [MyExe] Error 1    
recipe for target `MyExe' failed
Run Code Online (Sandbox Code Playgroud)

警告:

libMyLibA.so, needed by libMyLibB.so, not found (try using -rpath or -rpath-link)
Run Code Online (Sandbox Code Playgroud)

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

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

有办法解决这个问题吗?

jpe*_*pen 5

使用-rpath选项.

在Eclipse CDT中,右键单击"MyExe"项目 - >属性 - > C/C++构建 - >设置 - >工具设置 - >**C链接器 - >其他 - >其他选项

-rpath"libMyLibA.so的路径"