大意就是-Bstatic参数指定对跟在它后面的所有库执行静态连接,如下就指定LDFLAGS对png这个库静态连接,ld会自动去搜索libpng.a -Bstatic -lpng -lz 1 -l:filename 如果你觉得上面一种静态连接方式不适合你,可以看看ld的官方手册《2.1 Command Line Options》中关于-l参数的说明,如下: 注意上面的说明中红框标注的...
OK,从中已经可以看到重要区别了:在不带static的版本中,main.c里定义的testfunc函数被认为是一个外部函数(标识为U),而被static修饰的却是本地实现函数(标识为T)。 而标识为U的函数是需要外部去实现的,这也就解释了为何nostatic的版本会报undefined reference to 'testfunc'错误,因为压根就没有外部的谁去实现这个...
为了让gcc在链接时使用静态链接库文件libunwind.a,我们可以添加-static参数,使用如下编译命令gcc hello.o –static –L/usr/local/opt/llvm/lib –lunwind。 B. 优化参数 编译优化也是编译器的重要功能,适当的编译优化能大大加速程序的执行效率。gcc提供了4级优化参数,分别是-O0、-O1、-O2、-O3。 一般来说,数...
大意就是-Bstatic参数指定对跟在它后面的所有库执行静态连接,如下就指定LDFLAGS对png这个库静态连接,ld会自动去搜索libpng.a 代码语言:javascript 复制 -Bstatic-lpng-lz -l:filename 如果你觉得上面一种静态连接方式不适合你,可以看看ld的官方手册《2.1 Command Line Options》中关于-l参数的说明,如下: 注意上面...
直接使用命令./app_static 2.使用gcc生成动态库及使用动态库的方法 第一步:生成test.o目标文件,使用如下命令。在此处需要添加-fPIC参数,该参数用于生成位置无关代码已工生成动态库使用,使用命令:gcc -c -o test.o -fPIC test.c 第二步:使用-shared参数生成动态库,使用如下命令:gcc -shared -o libmyshare....
预处理:使用-E参数可以让GCC在预处理结束后停止编译过程 gcc -E test.c -o test.i 编译: gcc -S test.i -o test.s 汇编: gcc -c test.s -o test.o 链接: gcc test.o -o test gdb:调试 是对可执行程序调试 gdb test 开始调试test
-static:指定生成静态链接库。 -fPIC:表示编译为位置独立的代码,用于编译共享库。目标文件需要创建成位置无关码,概念上就是在可执行程序装载它们的时候,它们可以放在可执行程序的内存里的任何地方。 -l参数和-L参数 -l参数就是用来指定程序要链接的库,-l参数紧接着就是库名。那么库名跟真正的库文件名有什么关系...
intglobal_var=0x10;intglobal_func(void){return0x11;}staticintstatic_var=0x20;staticintstatic_func(void){return0x21;}externintextern_var;externintextern_func(void);intmain(void){intx=0;x=global_func();global_var=0x12;x=static_func();static_var=0x22;x=extern_func();extern_var=0x32;...
gcc -static-o helloworld_static helloworld.o 在windows平台上使用mingw编译发现这两种方式生成的exe文件的大小都一样,为40kb,怀疑mingw的编译的库是静态库。 下面看一下linux平台上使用gcc两种编译方式的文件大小区别: -nostartfiles: 不链接系统标准启动文件,而标准库文件仍然正常使用。
$ gcc main.c -static -L. -lmylib 此时可以用 ldd 看编译出的执行档与shared链接库的相依性 输出结果显示出该执行文件需要 libmylib.so.1 这个shared library。 会显示 not found 因为没指定该library所在的目录,所找不到该library。 因为编译时有指定-soname参数为 libmylib.so.1 的关系,所以该执行档会...