Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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
链接到Mac OS X上的静态C++库:不从库调用全局对象构造函数 我的静态C++库包含一些具有构造函数的全局对象。测试程序是用苹果的GCC4.2.1构建的,运行时可以看到对象是零初始化的,但没有调用构造函数。对于任何静态类成员变量也是如此_C++_Macos_Static - Fatal编程技术网

链接到Mac OS X上的静态C++库:不从库调用全局对象构造函数 我的静态C++库包含一些具有构造函数的全局对象。测试程序是用苹果的GCC4.2.1构建的,运行时可以看到对象是零初始化的,但没有调用构造函数。对于任何静态类成员变量也是如此

链接到Mac OS X上的静态C++库:不从库调用全局对象构造函数 我的静态C++库包含一些具有构造函数的全局对象。测试程序是用苹果的GCC4.2.1构建的,运行时可以看到对象是零初始化的,但没有调用构造函数。对于任何静态类成员变量也是如此,c++,macos,static,C++,Macos,Static,可以通过向ld提供-force_load选项来纠正此问题,但由于可执行文件的大小太大,这种方法并不好。我试图引用文件中的函数,其中定义了全局对象,但没有效果 在Linux gcc 4.5.1下构建相同代码时,不存在此类问题。这是因为在将二进制文件链接到存档文件时。a链接器仅从存档文件中提取二进制文件中未解析的符号。也就是说,如果二进制文件未引用归档文件中的全局或静态对象,则该对象的符号及其初始化代码将不会链接到中 这是存档和未引用全局对象的常见问题。常见的解决方案是以某种方式从二进制文件中引用该

可以通过向ld提供-force_load选项来纠正此问题,但由于可执行文件的大小太大,这种方法并不好。我试图引用文件中的函数,其中定义了全局对象,但没有效果


在Linux gcc 4.5.1下构建相同代码时,不存在此类问题。

这是因为在将二进制文件链接到存档文件时。a链接器仅从存档文件中提取二进制文件中未解析的符号。也就是说,如果二进制文件未引用归档文件中的全局或静态对象,则该对象的符号及其初始化代码将不会链接到中


这是存档和未引用全局对象的常见问题。常见的解决方案是以某种方式从二进制文件中引用该对象,例如获取其sizeof。或者为该库提供一个初始化函数,该函数执行全局对象的构造函数应该执行的操作,并使您的二进制调用该函数。

您如何完成最后的链接?例如,对于gcc,g++,ld?我使用g++,因此,ld用于感谢您的回复。我试图引用全局对象;但是没有成功。这似乎是一个链接器的bug…您应该从二进制代码中引用它,比如静态\u cast和全局\u对象\u在\u归档中。这绝对不是一个链接器错误。我再次得到同样的结果:我用我们非常机密的代码做了一个最小的例子,但这个例子很好用。至于真正的代码,我将nm加载的-force_的输出与原始变量进行了比较,发现我的全局变量没有变化。事情变得更加混乱。。。非常感谢你的帮助。