我正在生成一个.c文件,其中包含来自.make文件的全局字符串变量,并将其编译到静态库中。在将该库链接到共享库后,全局字符串符号丢失,因为它没有在库中使用。如何强制将该特定对象链接到动态库,或者使用该字符串以便将符号添加到共享库中。
我尝试从共享库makefile生成另一个.c文件,但没有结果。我需要该字符串显示在共享库的.data部分。
静态库的生成文件
#ifndef _teststatic
#define _teststatic
#endif
char __test_static_string[] = "This string is in static lib.";
共享库的生成文件
#ifndef _testshared
#define _testshared
#endif
char __test_shared_string[] = "This string is in shared lib.";
extern char __test_static_string[];
共享库的.data节
Contents of section .data:
264f20 204f2600 00000000 00000000 00000000 O&.............
264f30 00000000 00000000 00000000 00000000 ................
264f40 00000000 00000000 00000000 00000000 ................
264f50 e61d1f00 00000000 f31d1f00 00000000 ................
264f60 0a1e1f00 00000000 191e1f00 00000000 ................
264f70 54686973 20737472 696e6720 69732069 This string is i
264f80 6e207368 61726564 206c6962 2e00 n shared lib..
使用gcc标志
--整个归档
是不可能的。
2条答案
按热度按时间ndasle7k1#
静态库的生成文件
共享库的生成文件
在这种情况下,printf强制链接器链接静态库生成的文件的对象,所有全局字符串出现在shlibs.data节中。
此方法也适用于“嵌套”静态库。
whitzsjs2#
我找到了另一个更好的方法。
这一个适用于头文件(可能也适用于cpp文件)。
对于窗口: