Tag: 链接器

如何从C调用用C ++编写的lib?

在我看来,这似乎是一个明智的选择,但我找不到任何反对或为此的信息。 从demangling等的角度来看,我不认为这是一个大问题,但我无法弄清楚,我怎么能写一个小C程序从一个小小的C ++库调用一个函数。 我现在在linux上,尝试使用静态绑定。 这一定是许多人遇到的问题,或许多书籍所涵盖的内容,但我觉得这个问题就像一个盲目的傻瓜。 有趣的是,SO也没有这样的问题。 我甚至不知道如果这可以工作,那么必须如何做得更少。

C / C ++:如何找出链接标志?

如何可靠地找出库的链接标志? 我总是谷歌搜索/挖掘手册。 有没有办法列出可用于链接的库,名称和/或描述? 编辑:Linux系统,GNU构建链,经典。

C / C ++链接器CALL16在xxxxx处重定位而不是全局符号

我在链接时遇到这些错误,这两个消息都与同一个目标文件有关。 CALL16 reloc at 0x5f8 not against global symbol 和 could not read symbols: Bad value 第二条消息似乎是我收到CALL16错误的原因,但文件编译得很好。 有关修复此问题的提示吗? 仅供参考,我正在为MIPS目标进行交叉编译并使用gcc 4.1.2 编辑:到目前为止没有运气: 以下是我使用的标志:-fPIC,-Wl,-rpath,-Wl,-O1 我也试过以下没有成功: -mno-显式relocs -mexplicit-relocs -mlong通话 -mno长通话 -mxgot -mno-xgot 与此同时,我将在此时回到源头并进行更多调查。

编译自定义malloc

我编写了一个使用标准C原型实现malloc / calloc / realloc / free的自定义库,我想出了如何编译它。 我想通过链接标准应用程序来测试库吗? 这样做有什么好办法? 一旦我有一个工作库,我假设我可以用LD_PRELOAD加载它,但是如何使我的函数与其共存但优先于系统库? 我的函数需要调用malloc才能让内存运行,所以我不能完全抛弃stdlib …帮助?

FreeType库和“对FT_Init_FreeType的未定义引用”

来自PHP,这是我第一次使用C / C ++(对我来说很容易)。 我正在按照本教程使用FreeType库编写一个简单的脚本。 以下编译就好了: #include #include FT_FREETYPE_H main() { FT_Library library; FT_Face face; } 这告诉我FreeType库随时可供编译器使用。 但是,一旦我尝试使用任何方法,事情就会中断。 例如,采用以下脚本: #include #include FT_FREETYPE_H main() { int error; FT_Library library; error = FT_Init_FreeType(&library); if (error) {} FT_Face face; error = FT_New_Face(library, “/usr/share/fonts/truetype/arial.ttf”, 0, &face); if (error == FT_Err_Unknown_File_Format) { printf(“Font format is unsupported”); } else if (error) […]

如何阻止gcc通过标准库路径传递-L到链接器

我有一个脚本需要阻止gcc传递-L标准库路径到ld 。 使用-nostdlib抑制-lc -lgcc等但不抑制-L 。 使用-Wl,-nostdlib可以防止链接器使用自己的标准路径,但不会阻止gcc使用标准路径传递-L 。 有没有办法确保gcc在库路径中没有任何内容调用链接器期望我在命令行上显式写入的目录?

gcc默认在Mac OS X上的C中链接数学库?

从这个问题: 为什么你必须在C中链接数学库? 我知道C数学库(libm)与C标准库(libc)分离,默认情况下没有链接。 但是当我在mac osx 10.11.1上使用gcc filename.c而不是-lm编译下面的代码时: #include #include int main (void) { double x = sqrt (2.0); printf (“The square root of 2.0 is %f\n”, x); return 0; } 没有链接错误,输出可执行文件正常工作。 然后我试了otool -L output : output: /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1225.1.1) /opt/local/lib/libgcc/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0) 我想知道mac上有一些库结构差异吗? 或者它是gcc 5.2.0的新function? 非常感谢! 更新: […]

静态库如何链接到依赖项?

说我有libA。 它取决于例如libSomething,因为libA的非内联方法调用了libSomething.h中的方法。 在这种情况下,依赖关系如何链接? libA在编译时是否必须静态链接到libSomething,或者libA用户(使用libA的应用程序)是否需要链接到libA和libSomething? 谢谢

如何在Visual Studio项目中引用用户定义的段的开头?

我正在努力转换与gnu工具链的ld链接的C程序,以使其作为visual-studio(2005)项目进行编译。 该程序将.data-symbols放在不同的段中,在初始化阶段,它在段之间复制数据。 指向段开头和结尾的指针在ld链接描述文件中定义。 我理解如何将变量定位到不同的,用户定义的段中,但我还没有弄清楚如何定义链接器常量,如_start_of_my_segment,或者是否有类似于Visual Studio中的链接描述文件。 我的目标是能够编译程序,最好不要修改引用链接器定义的符号的源代码,而是使用我自己的Visual Studio项目中的数据自定义布局。 下面是一些示例C代码,用于说明我想要做什么以及与gcc / ld链接时使用的make脚本的(精简,可能是语法错误)版本。 任何提示将不胜感激! #pragma data_seg( “MY_DATA_FOO” ) #pragma data_seg( “MY_DATA_BAR” ) #pragma comment(linker, “/section:MY_DATA_BAR,R”) __declspec(allocate(“MY_DATA_FOO”)) int foo1; __declspec(allocate(“MY_DATA_FOO”)) int foo2; __declspec(allocate(“MY_DATA_BAR”)) int bar1 = 1; __declspec(allocate(“MY_DATA_BAR”)) int bar2 = 2; #pragma data_seg( ) void test() { foo1 = bar1; foo2 = bar2; // i would rather do […]

在C中,是否可以将导出的函数名称更改为不同的名称?

所有。 我想链接一个调用malloc()函数的库。 但是,我的目标环境是不同的, malloc()作为内联函数提供。 如何使库对malloc()的调用直接指向我的目标环境的malloc()例程? 是否可以通过任何方式更改导出的函数名称? 如果是这样,我可以先编码my_malloc()并将其导出为malloc()并将库链接到该库: #include // malloc() is inline function declared there void my_malloc (void) { malloc (void); } 更具体地说,该库是来自linux发行版的库,因此它依赖于libc。 但我的环境是嵌入式的,没有libc库, malloc() , free() ,…是自定义实现的。 一些是内联函数,一些是库函数。