GCC在链接过程中,对参数中的库的顺序是有要求的,参数右侧的库会先于左侧的库加载,也就是说参数的解析是从右往左的。
假设库B依赖与库A,则链接的时候要写为:
gcc -o bin B A
如果写为:
gcc -o bin A B
则在B中引用的A中的内容就会无法链接通过。
gcc -o bin B A
如果写为:
gcc -o bin A B
则在B中引用的A中的内容就会无法链接通过。
如果多个库中对某些符号的定义相同,链接时谁先谁后可能都可以链接通过,但是运行时会产生不同的效果,需要特别注意,消除这些相同的符号定义。尤其是通过代码生成工具(如yacc)生成的代码,很可能出现在多个库中出现相同符号(如yy_parse)。