C++ 如何使gcc/ld在多个'-l图书馆';当使用-static时?

C++ 如何使gcc/ld在多个'-l图书馆';当使用-static时?,c++,gcc,linker,ld,static-linking,C++,Gcc,Linker,Ld,Static Linking,我想静态编译pdf2svg,这样我就可以在稳定的Debian中使用最新版本。/configure没有提供--enable static选项,因此我在链接器的Makefile-static选项中手动添加了该选项 不幸的是,结果并不像我想象的那样。链接给了我大量的未定义引用错误。通过谷歌搜索,我发现问题是由-lsome_lib的顺序错误引起的。Gcc链接器第一次看到每个库时,会尝试静态链接一次-Stackoverflow问题: 是否有可能使链接器多次通过库列表?也许这就是您搜索的内容(从gnu ld

我想静态编译
pdf2svg
,这样我就可以在稳定的Debian中使用最新版本。
/configure
没有提供
--enable static
选项,因此我在链接器的
Makefile
-static选项中手动添加了该选项

不幸的是,结果并不像我想象的那样。链接给了我大量的
未定义引用
错误。通过谷歌搜索,我发现问题是由
-lsome_lib
的顺序错误引起的。Gcc链接器第一次看到每个库时,会尝试静态链接一次-Stackoverflow问题:


是否有可能使链接器多次通过库列表?

也许这就是您搜索的内容(从gnu ld手册页):


也许这就是您搜索的内容(从gnu ld手册页):


只要有可能,勾号就是将静态引用添加到类(或函数)的对象,该对象未链接到同一库的另一个cpp文件(或已使用的另一个库)中

我有这样的情况:

  • clsA.cpp中具有类clsA的库,该类给出了错误
  • 库A带有foo.cpp,不提供引用错误
  • 使用clsA类的库B
  • 应用程序同时使用库和foo.cpp中的类/函数
在使用库B中使用clsA类的对象时,我在应用程序中获得了未解析的引用

将应用程序链接到库A和库B时会显示错误。因为我使用CodeLite,所以很难更改库顺序。我只是在foo.cpp中放置了一个静态对象:

#include "clsA.h"
clsA objA;
链接器现在看到clsA在库A中被引用(在foo.cpp之间),并且将在应用程序中正确链接,因为foo.cpp已经被链接

但是,即使对象是在一个虚拟函数中创建的,并且从未被调用,该技巧仍然有效,因此该对象永远不会被分配:

// foo.cpp
#include "clsA.h"
void dummyf()
{
   clsA objA;
}

只要有可能,勾号就是将静态引用添加到类(或函数)的对象,该对象未链接到同一库的另一个cpp文件(或已使用的另一个库)中

我有这样的情况:

  • clsA.cpp中具有类clsA的库,该类给出了错误
  • 库A带有foo.cpp,不提供引用错误
  • 使用clsA类的库B
  • 应用程序同时使用库和foo.cpp中的类/函数
在使用库B中使用clsA类的对象时,我在应用程序中获得了未解析的引用

将应用程序链接到库A和库B时会显示错误。因为我使用CodeLite,所以很难更改库顺序。我只是在foo.cpp中放置了一个静态对象:

#include "clsA.h"
clsA objA;
链接器现在看到clsA在库A中被引用(在foo.cpp之间),并且将在应用程序中正确链接,因为foo.cpp已经被链接

但是,即使对象是在一个虚拟函数中创建的,并且从未被调用,该技巧仍然有效,因此该对象永远不会被分配:

// foo.cpp
#include "clsA.h"
void dummyf()
{
   clsA objA;
}

这是问题的答案,但不幸的是,这对我没有帮助。最后我使用了so库和LD_LIBRARY_PATH。这是问题的答案,但不幸的是,它对我没有帮助。最后我使用了so库和LD_库路径。