【发布时间】:2011-01-10 02:19:30
【问题描述】:
我尝试使用 g++ 将我的可执行程序与 2 个静态库链接。 2 个静态库具有相同的函数名。我期待链接器出现“多重定义”链接错误,但我没有收到。谁能帮忙解释一下为什么会这样?
staticLibA.h
#ifndef _STATIC_LIBA_HEADER
#define _STATIC_LIBA_HEADER
int hello(void);
#endif
staticLibA.cpp
#include "staticLibA.h"
int hello(void)
{
printf("\nI'm in staticLibA\n");
return 0;
}
输出:
g++ -c -Wall -fPIC -m32 -o staticLibA.o staticLibA.cpp
ar -cvq ../libstaticLibA.a staticLibA.o
a - staticLibA.o
staticLibB.h
#ifndef _STATIC_LIBB_HEADER
#define _STATIC_LIBB_HEADER
int hello(void);
#endif
staticLibB.cpp
#include "staticLibB.h"
int hello(void)
{
printf("\nI'm in staticLibB\n");
return 0;
}
输出:
g++ -c -Wall -fPIC -m32 -o staticLibB.o staticLibB.cpp
ar -cvq ../libstaticLibB.a staticLibB.o
a - staticLibB.o
main.cpp
extern int hello(void);
int main(void)
{
hello();
return 0;
}
输出:
g++ -c -o main.o main.cpp
g++ -o multipleLibsTest main.o -L. -lstaticLibA -lstaticLibB -lstaticLibC -ldl -lpthread -lrt
【问题讨论】:
-
运行程序时
hello()打印什么?我会假设链接顺序决定了答案。也就是说,-lstaticLibA -lstaticLibB会给出与-lstaticLibB -lstaticLibA不同的答案。 -
我很抱歉。我不会如何编辑我的帖子,所以我在"How to avoid multiple definition linking error 发布了一个新问题
标签: linux linker g++ definition