如何得知GCC默认链接的标准库? 50
如果让gcc默认编译加连接生成可执行文件test没有问题运行也正常test:gcchello.c-otest但如果想自己先编译.o,再用ld链接,all:gcc$(USR...
如果让gcc默认编译加连接 生成可执行文件test没有问题 运行也正常
test:
gcc hello.c -o test
但如果想自己先编译.o,再用ld链接,
all:
gcc $(USR_CMD) -c hello.c -o hello.o
ld --start-group -static -L$(GCC_LIB_PATH) $(ENV_LIB_PRE) -lgcc hello.o $(ENV_LIB_POST) --end-group -o hello
就是各种链接错误(有时候根据手册 能配对,但是有的编译器没有对应的手册或者找不到)
c:/MinGW/lib/crt1.o:crt1.c:(.text+0x38): undefined reference to `signal'
c:/MinGW/lib/crt1.o:crt1.c:(.text+0x9c): undefined reference to `signal'
c:/MinGW/lib/crt1.o:crt1.c:(.text+0xcc): undefined reference to `signal'
c:/MinGW/lib/crt1.o:crt1.c:(.text+0xd9): undefined reference to `_fpreset'
c:/MinGW/lib/crt1.o:crt1.c:(.text+0xf0): undefined reference to `signal'
c:/MinGW/lib/crt1.o:crt1.c:(.text+0x120): undefined reference to `signal'
c:/MinGW/lib/crt1.o:crt1.c:(.text+0x13a): undefined reference to `signal'
……………………………………
,而且感觉每个版本编译器的所需链接库完全不一样
现在想问的就是 GCC有没有一个指令 告诉我它默认编译加连接时候 到底用了什么库 展开
test:
gcc hello.c -o test
但如果想自己先编译.o,再用ld链接,
all:
gcc $(USR_CMD) -c hello.c -o hello.o
ld --start-group -static -L$(GCC_LIB_PATH) $(ENV_LIB_PRE) -lgcc hello.o $(ENV_LIB_POST) --end-group -o hello
就是各种链接错误(有时候根据手册 能配对,但是有的编译器没有对应的手册或者找不到)
c:/MinGW/lib/crt1.o:crt1.c:(.text+0x38): undefined reference to `signal'
c:/MinGW/lib/crt1.o:crt1.c:(.text+0x9c): undefined reference to `signal'
c:/MinGW/lib/crt1.o:crt1.c:(.text+0xcc): undefined reference to `signal'
c:/MinGW/lib/crt1.o:crt1.c:(.text+0xd9): undefined reference to `_fpreset'
c:/MinGW/lib/crt1.o:crt1.c:(.text+0xf0): undefined reference to `signal'
c:/MinGW/lib/crt1.o:crt1.c:(.text+0x120): undefined reference to `signal'
c:/MinGW/lib/crt1.o:crt1.c:(.text+0x13a): undefined reference to `signal'
……………………………………
,而且感觉每个版本编译器的所需链接库完全不一样
现在想问的就是 GCC有没有一个指令 告诉我它默认编译加连接时候 到底用了什么库 展开
4个回答
展开全部
我遇到过这几种可能:
1.函数确实只有声明未实现。
2.生成的静态归档文件相互之间有依赖,链接需要先后顺序,依赖的要放在被依赖的前面。
3.需要标准库支持。
在你的表述中好像不应该是第2种情况,因为--start-group --end-group 会自动在之间的库文件循环查找的。
1.函数确实只有声明未实现。
2.生成的静态归档文件相互之间有依赖,链接需要先后顺序,依赖的要放在被依赖的前面。
3.需要标准库支持。
在你的表述中好像不应该是第2种情况,因为--start-group --end-group 会自动在之间的库文件循环查找的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是库引用问题,引用正确的库可以解决大部分“undefined reference”问题。命令中虽然加入了库目录-L$(GCC_LIB_PATH)
,却没有具体引用哪个库,这就是原因。如引用libuser32.a库只要加入这个参数就可以了:-luser32
,却没有具体引用哪个库,这就是原因。如引用libuser32.a库只要加入这个参数就可以了:-luser32
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
/**
The -v option to gcc will cause it to dump information about the default options it will use including the library paths and default libraries and object files that will be linked in.
If you give the -Wl,--verbose option, gcc will pass the --verbose to the linker which will dump exactly where it's looking for libraries, including both failed and successful searches.
Combine both options, and you'll see exactly what libraries are linked in, and why they're being linked in.
gcc -v hello.c -Wl,--verbose
*/
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询