c++代码的静态链接
Static linking of C++ code
我有以下问题:我使用下面的一些类来初始化C库:
class Hello
{
public:
Hello()
{
cout << "Hello world" << endl;
}
~Hello()
{
cout << "Goodbye cruel world" << endl;
}
} hello_inst;
如果我在hello。Cc文件并将其与包含my main()的另一个文件一起编译,然后在调用之前创建hello_inst并在调用之后销毁它主要()。在本例中,它只打印一些行,在我的项目中,我通过LIBXML_TEST_VERSION .
我正在创建多个可执行文件,这些可执行文件在cmake项目中共享许多相同的代码。根据这个线程:在CMake中添加多个可执行文件,我创建了一个包含上面所示代码的静态库,然后将可执行文件链接到该库。不幸的是,在这种情况下,hello_inst永远不会被创建(libxml2也永远不会初始化)。我该如何解决这个问题?
我有一个类似的问题,并通过将我的库定义为静态来解决它。因此,我使用了以下代码:
add_library( MyLib SHARED ${LBMLIB_SRCS} ${LBMLIB_HEADER})
也许这能解决你的问题
没有正式的方法强制共享库全局变量由标准初始化,并且依赖于编译器。
通常在第一次实际使用库中的某些内容(类、函数或变量)或实际使用变量本身时执行此操作。
如果你想强制使用hello_inst
,调用它的函数,然后查看是否以及何时调用构造函数和析构函数。
阅读这个线程获取更多信息:http://www.gamedev.net/topic/622861-how-to-force-global-variable-which-define-in-a-static-library-to-initialize/
据我所知,在库中定义的静态量应该在调用main之前构造,在调用main之后销毁,按照您描述的方式。的确,我在许多项目中使用过共享库,但从未遇到过你描述的问题。我理解一个库文件,比对象文件的容器多一点。但是,也就是说.....
如果您的代码对创建的对象不做任何操作,则链接器可以自由地删除它(死代码删除)。我建议确保静态对象被引用。也许是调用一个成员函数?
- 如果我想链接静态库并删除未使用的符号.txt我应该如何处理 Cmakelist
- 为什么当我在 C 程序中链接静态库时会"undefined symbol"?
- 强制链接静态库与 cmake 不起作用
- CMake 项目链接静态库
- 使用 CMake 在 Mac 上链接静态 GLFW 和 OpenGL
- DLL 链接静态库 - 未使用函数中未解析的链接器符号
- 如何使用 WAF 链接静态库?
- 无法在 Mac OS X 上链接静态资源库
- MAPI 链接静态库 (LNK2019: 未解析的外部符号)
- 为什么G 不链接静态程序
- 节点本机模块 - 链接静态库
- 在链接链接静态(GSOAP)库的共享库时,为什么会得到一个未定义的符号
- 链接静态和动态库时违反 ODR
- 代码中的MinGW::块不链接静态OpenSSL库
- Emscripten 链接静态库错误:wasm 流式编译失败:导入'env.getTempRet0'
- 如何正确链接静态类
- CMake 链接静态库和 glib 错误
- Eclipse CDT:如何在没有项目清理>>项目重建的情况下重新链接静态库
- 错误:链接静态库时出现";"
- gcc 如何链接静态库