Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.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++ 基于gcc的图书馆动态链接_C++_Gcc_Makefile_Lib - Fatal编程技术网

C++ 基于gcc的图书馆动态链接

C++ 基于gcc的图书馆动态链接,c++,gcc,makefile,lib,C++,Gcc,Makefile,Lib,案例1: 我有3个不同的项目与gcc链接如下: ProjectA.so <--- Dynamic link --- ProjectB.so <--- Dynamic Link --- ProjectC (App) 所以我的问题是:我们必须链接我们链接的库内部使用的库吗? 为什么有时有效(案例1),有时无效(案例2)?关于这一点有没有一般的规定 非常感谢 您可能希望删除超链接标记,而改为标记编译器。“我们必须链接我们链接的库在内部使用的库吗?”-假设所有库都是共享的,则不需要链接到

案例1:

我有3个不同的项目与gcc链接如下:

ProjectA.so  <--- Dynamic link --- ProjectB.so <--- Dynamic Link --- ProjectC (App)

所以我的问题是:我们必须链接我们链接的库内部使用的库吗?

为什么有时有效(案例1),有时无效(案例2)?关于这一点有没有一般的规定


非常感谢

您可能希望删除超链接标记,而改为标记编译器。“我们必须链接我们链接的库在内部使用的库吗?”-假设所有库都是共享的,则不需要链接到内部使用的库。您的代码似乎有问题(C++或
CMakeLists.txt
)。请将代码添加到问题帖子中。好的,我发现了一些东西。事实上,在同一时间,我改变了其他一些东西。ProjectB中的类
派生的
继承自ProjectA中的类
。在C项目中,我在
Derived
上使用了一个共享的ptr。现在它是一个简单的对象。它能解释我们也需要链接ProjectA吗?可能是的,@Maluna34,如果在ProjectC中使用指向
派生的
(包括任何类型的智能指针)的指针,那么ProjectC可能包含对
方法或析构函数的直接调用,位于项目A中。这将构成对A的直接依赖,要求其DSO包含在链接中。如果
Derived
具有内联方法或调用
Base
方法的内联析构函数,则这种情况尤其可能发生。您可能希望删除超链接标记,而代之以标记编译器。“我们必须链接我们链接的库内部使用的库吗?”-假设所有库都共享,则不,您无需在内部使用链接库。您的代码似乎有问题(C++或
CMakeLists.txt
)。请将代码添加到问题帖子中。好的,我发现了一些东西。事实上,在同一时间,我改变了其他一些东西。ProjectB中的类
派生的
继承自ProjectA中的类
。在C项目中,我在
Derived
上使用了一个共享的ptr。现在它是一个简单的对象。它能解释我们也需要链接ProjectA吗?可能是的,@Maluna34,如果在ProjectC中使用指向
派生的
(包括任何类型的智能指针)的指针,那么ProjectC可能包含对
方法或析构函数的直接调用,位于项目A中。这将构成对A的直接依赖,要求其DSO包含在链接中。如果
Derived
具有内联方法或调用
Base
方法的内联析构函数,则这种情况尤其可能发生。
ProjectA1.so: error adding symbols: DSO missing from command line