У меня есть два файла 37064544_p1.cpp
и 37064544_p2.cpp
с тем же содержимым, что показано ниже:
int add(int x,int y)
{
return x+y;
}
Я скомпилировал их, используя
g++ -c 37064544_p2.cpp -o 37064544_p2.o
g++ -c 37064544_p2.cpp -o 37064544_p2.o
и добавили их в архив с помощью
ar -rsc lib37064544pf.a 37064544_p1.o 37064544_p2.o
И
$ nm -s lib37064544pf.a
дает мне:
Archive index:
_Z3addii in 37064544_p1.o
_Z3addii in 37064544_p2.o
37064544_p1.o:
0000000000000000 T _Z3addii
37064544_p2.o:
0000000000000000 T _Z3addii
и
$ ar -t lib37064544pf.a
дает мне
37064544_p1.o
37064544_p2.o
У меня есть драйвер, который вызывает функцию _Z3addii
, которая скомпилирована с помощью
g++ -static 37064544driver.cpp -o 37064544driver.elf -L. -l37064544pf
Результат
Sum : 11
Вопросы
-
Как разрешен символ
_Z3addii
?- Это согласно индексу архива?
- Это порядок, в котором мы заполняем архив, используя
ar
?
-
Как я могу изменить этот порядок?
- Как предотвратить
ar
от дублирования символов?
Компилятор: g++ 4.6.3