Символы в общих библиотекахC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Символы в общих библиотеках

Сообщение Anonymous »

Я подготовил это руководство, чтобы научиться создавать общие библиотеки. Я добавил несколько мелочей, потому что хотел кое-что проверить. Вот мой исходный код:

Код: Выделить всё

#ifndef foo_h__
#define foo_h__

void foo(void);

class CFoo
{
public:
void fooing1();
void fooing2(int a);
void fooing3(int a, int b = 0);
};

#endif      // foo_h__
foo.cpp

Код: Выделить всё

#include 
#include "foo.h"

void foo(void)
{
puts("Hello, I'm a shared library");
}

void CFoo::fooing1()
{
puts("CFoo::fooing1()");
}

void CFoo::fooing2(int a)
{
printf("CFoo::fooing2(%d)\n", a);
}

void CFoo::fooing3(int a, int b)
{
printf("CFoo::fooing3(%d, %d)\n", a, b);
}
main.c

Код: Выделить всё

#include 
#include "foo.h"

int main(void)
{
puts("This is a shared library test...");
foo();

CFoo *foo1 = new CFoo();
foo1->fooing1();
foo1->fooing2(12);
foo1->fooing3(1);
foo1->fooing3(1, 2);
delete foo1;

return 0;
}
И скрипт сборки:

Код: Выделить всё

g++ -c -Wall -Werror -fpic foo.cpp
g++ -shared -o libfoo.so foo.o
g++ -Wall -o test main.c -lfoo -L.
При вводе команды nm -D libfoo.so | c++filt, я получаю такой вывод:

Код: Выделить всё

 0000000000201040 B __bss_start
w __cxa_finalize
0000000000201040 D _edata
0000000000201048 B _end
0000000000000818 T _fini
w __gmon_start__
0000000000000640 T _init
w _ITM_deregisterTMCloneTable
w _ITM_registerTMCloneTable
w _Jv_RegisterClasses
U printf
U puts
0000000000000796 T foo()
00000000000007a8 T CFoo::fooing1()
00000000000007c2 T CFoo::fooing2(int)
00000000000007ea T CFoo::fooing3(int, int)
У меня два вопроса:
  • Почему printf и puts имеют букву U перед именами функций? А функции foo(), CFoo::fooing1(), CFoo::fooing2(int) и CFoo::fooing3(int, int) имеют букву T перед именами функций?
  • Что делать, чтобы получить U перед именем функции? CFoo функции?


Подробнее здесь: https://stackoverflow.com/questions/317 ... -libraries
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»