Решено: функции в динамических библиотеках (как называются и к5ак этим рулить?)

Модератор: Модераторы разделов

grub
Сообщения: 128
ОС: Slackware 12.0

Решено: функции в динамических библиотеках

Сообщение grub »

Необходимо написать динамическую библиотеку, которая будет подключаться к программам динамически (с помощью библиотеки dl ).
Пишу исходник my.cc, в нем функция которая называется my_func. Делаю объектный модуль с флагом -fPIC, потом собственно собираю библиотеку my.so.0 с ключем -shared. Пытаюсь использовать... Подключается нормально, а вот при попытке взять указатель на функцию my_func возникает ошибка! Зато получается взять указатель на функцию что-то типа _Z8my_funcv !!!
Если этуже библиотеку использую а этапе компиляции (включаю нужный заголовок в проект и собираю с опцией -lmy, то все нормально и my_func это my_func)

Внимание вопрос! Почему меняется имя функции и как это исправить? Кто-нибудь в курсе как с этим бороться?

Хренбы с ним что оно другое, но вот если собрать библиотеку в другом дистрибутиве (другое ядро, библиотеки и гцц) то и название опять меняется!
Спасибо сказали:
Аватара пользователя
noob
Сообщения: 212

Re: Решено: функции в динамических библиотеках

Сообщение noob »

может быть
extern "C" my_func
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: Решено: функции в динамических библиотеках

Сообщение Zeus »

grub писал(а):
29.08.2007 21:21
Внимание вопрос! Почему меняется имя функции и как это исправить? Кто-нибудь в курсе как с этим бороться?

Как исправить - тебе уже написали.
А почему: потому что компилятор для своих нужд может изменять название функций в объектном коде.
У c++ это связано с перегрузками, а зачем это в чистом С - не знаю.
Спасибо сказали:
grub
Сообщения: 128
ОС: Slackware 12.0

Re: Решено: функции в динамических библиотеках

Сообщение grub »

noob писал(а):
29.08.2007 21:31
extern "C" my_func


это где писать? в my.cc?
Спасибо сказали:
grub
Сообщения: 128
ОС: Slackware 12.0

Re: Решено: функции в динамических библиотеках

Сообщение grub »

Щас попробовал помогло :rolleyes: Спасиба!!!

Смутно помню, что раньше в длл под виндами так писал, но для чего это не знал! Еще раз спасибо! :drinks:
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: Решено: функции в динамических библиотеках

Сообщение v04bvs »

Zeus писал(а):
29.08.2007 22:10
grub писал(а):
29.08.2007 21:21
Внимание вопрос! Почему меняется имя функции и как это исправить? Кто-нибудь в курсе как с этим бороться?

Как исправить - тебе уже написали.
А почему: потому что компилятор для своих нужд может изменять название функций в объектном коде.
У c++ это связано с перегрузками, а зачем это в чистом С - не знаю.


В чистом C этого не бывает. За что мы все его и любим.
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: Решено: функции в динамических библиотеках

Сообщение Zeus »

v04bvs писал(а):
30.08.2007 08:49
Zeus писал(а):
29.08.2007 22:10

У c++ это связано с перегрузками, а зачем это в чистом С - не знаю.

В чистом C этого не бывает. За что мы все его и любим.

А grub написал "my.cc' и "гцц".
Спасибо сказали:
grub
Сообщения: 128
ОС: Slackware 12.0

Re: Решено: функции в динамических библиотеках

Сообщение grub »

v04bvs писал(а):
30.08.2007 08:49
Zeus писал(а):
29.08.2007 22:10
grub писал(а):
29.08.2007 21:21
Внимание вопрос! Почему меняется имя функции и как это исправить? Кто-нибудь в курсе как с этим бороться?

Как исправить - тебе уже написали.
А почему: потому что компилятор для своих нужд может изменять название функций в объектном коде.
У c++ это связано с перегрузками, а зачем это в чистом С - не знаю.


В чистом C этого не бывает. За что мы все его и любим.


да, таже простенькая библиотека но с расширением c нормально подключается без всяких extern`ов )
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: Решено: функции в динамических библиотеках

Сообщение Zeus »

Хм... а с файлами *.cc gcc работает как с плюсовыми, что-ли?
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: Решено: функции в динамических библиотеках

Сообщение v04bvs »

Zeus писал(а):
30.08.2007 10:27
Хм... а с файлами *.cc gcc работает как с плюсовыми, что-ли?

естественно. Это одно из стандартных расширений для C++, наряду в .cpp, .c++, .C, .cxx )))
Спасибо сказали: