Tag: 链接器

内联函数中的静态variables

我有一个在头文件中声明和定义的函数。 这本身就是一个问题。 当这个函数没有被内联时,每个使用这个头部的翻译单元都会得到这个函数的一个副本,当它们被链接在一起的时候会被复制。 我“固定”,通过内联function,但恐怕这是一个脆弱的解决scheme,因为据我所知,编译器不保证内联,即使您指定“内联”关键字。 如果不是这样,请纠正我。 不pipe怎样,真正的问题是,这个函数里的静态variables会发生什么? 最终有多less份?

C中的目标文件是什么?

我正在阅读关于C语言的库,但是我还没有find关于目标文件的解释。 其他编译文件和目标文件之间的真正区别是什么? 如果有人能用人类的语言来解释我会很高兴。

为什么我得到“未定义的引用sqrt”错误,即使我包含math.h头?

我对C很新,我有这样的代码: #include <stdio.h> #include <math.h> int main(void) { double x = 0.5; double result = sqrt(x); printf("The square root of %lf is %lf\n", x, result); return 0; } 但是,当我编译这个: gcc test.c -o test 我得到这样的错误: /tmp/cc58XvyX.o: In function `main': test.c:(.text+0x2f): undefined reference to `sqrt' collect2: ld returned 1 exit status 为什么会发生? sqrt()不在math.h头文件中? 我得到与cosh和其他三angular函数相同的错误。 为什么?

GCC:静态链接只有一些库

与GCC链接时,如何静态链接一些特定的库到我的二进制文件? gcc … -static …静态gcc … -static …试图静态链接所有的链接库,但我没有得到其中一些静态版本(例如:libX11)。

如何指定库path的偏好?

我正在编译一个使用g++和ld的c ++程序。 我有一个.so库,我想在链接过程中使用。 然而,在/usr/local/lib存在一个相同名称的/usr/local/lib ,而ld则是通过我直接指定的库来select该库。 我该如何解决这个问题? 对于下面的例子,我的库文件是/my/dir/libfoo.so.0 。 我试过的东西不起作用: 我的g ++命令是g++ -g -Wall -o my_binary -L/my/dir -lfoo bar.cpp 将/my/dir添加到我的$PATH en`variables的开始或结尾处 添加/my/dir/libfoo.so.0作为g ++的参数

如何打印ld(链接器)searchpath

打印ld所search的searchpath的方法是什么?

用GHC编译的小Haskell程序变成了巨大的二进制文件

即使是小的Haskell程序也变成了巨大的可执行文件。 我已经编写了一个小程序,这个程序是用GHC编译的,大小为7MB。 什么可以导致一个小的Haskell程序被编译成巨大的二进制文件? 如果有的话,我能做些什么来减less这种情况?

更改静态链接DLL的DLLsearchpath

我已经search了任何提示,我可以做到这一点,但我发现的是如何将SxS DLLredirect到本地应用程序文件夹。 这是我想要完成的:(C ++)Application.exe链接到一个DLL,Plugin.DLL(依赖项目)。 这个DLL不是放在应用程序目录中,而是放在一个名为“插件”的子文件夹中。 由于DLL是静态链接的,应用程序会尝试从应用程序文件夹加载它。 有没有办法如何改变这个特定的DLL的searchpath? 通过清单或VS2008链接器configuration?

未定义的引用'pthread_create' – 链接器命令选项顺序(库之前/之后的对象文件?)

当我尝试编译时,我收到一个特定的错误。 但是,这是不可能的,因为我使用正确的标志。 在server.c有库pthread.h 。 那么,我该如何解决我的链接问题呢? 我正在使用Linux(Ubuntu)。 make gcc -c -Wall -Wunused -ansi -pedantic -ggdb -o Server1.o Server.c gcc -c -Wall -Wunused -ansi -pedantic -ggdb Util.c gcc -o Server1.exe -Wall -Wunused -ansi -pedantic -ggdb -lpthread -lm Server1.o Util.o Server1.o: In function `main': /home/ruggero/ruggero_fine/Server.c:1002: undefined reference to `pthread_create' collect2: ld returned 1 exit status make: *** [Server1.exe] […]

gcc不会正确包含math.h

这是一个简单的例子,概述了我的问题 test.c的: #include <stdio.h> #include <math.h> main () { fmod ( 3, 2 ); } 这里是我发布的编译test.c的命令 gcc -lm test.c -o test 这是我发出上述命令时得到的输出 /tmp/ccQmRk99.o: In function `main': test.c:(.text+0x3e): undefined reference to `fmod' collect2: ld returned 1 exit status 我得到相同的输出,而不是我使用cc 。 我正在使用以下版本的gcc gcc-4.6.real (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1 任何想法,为什么我的程序不会编译?