![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
C++ hater
Старожил
Регистрация: 19.07.2009
Сообщений: 3,333
|
![]()
есть динамическая библиотека, написанная на плюсах. в некоторых классах используются inline функции, которые могут вызываться как самой библиотекой, так и приложением, использующим оную. но при вызове такой функции из приложения (не из библиотеки), получаем ошибку линковщика (undeclared reference). В студии все нормально, g++ ругается.
Вопрос, как правильно поступить в данной ситуации, и может ли функция, вызываемая из библиотеки быть встраиваемой.
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance |
![]() |
![]() |
![]() |
#2 |
Новичок
Джуниор
Регистрация: 14.10.2009
Сообщений: 2
|
![]()
у меня gcc version 4.3.2 и такая же проблема.Только на linux,но либа кроссплатформенная.Писалась на вин.Я сделал так:
#ifdef __GNUC__ без инлайн #else как было #endif А ты давай версию g++ и полный вывод Последний раз редактировалось gnudimarik; 16.10.2009 в 08:16. |
![]() |
![]() |
![]() |
#3 |
C++ hater
Старожил
Регистрация: 19.07.2009
Сообщений: 3,333
|
![]()
версия та же. моя либа тоже писалась под вин. здравый смысл мне подсказывает, что функции, которые вызываются из либы не могут быть инлайновыми (точнее это методы классов, а не просто экспортируемые функции). вот и хочу узнать, как правильно. и полный вывод чего дать?) сообщения undeclared reference?))
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance |
![]() |
![]() |
![]() |
#4 |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
![]()
Естественно, если функция встраиваемая, то логичный вывод, что у неё нет постоянного адреса и вызывать её нельзя ) Выход - сделать её не inline, другого не вижу )
|
![]() |
![]() |
![]() |
#5 |
C++ hater
Старожил
Регистрация: 19.07.2009
Сообщений: 3,333
|
![]()
2netrino
тогда объясни мне, почему студия (2003/2005/2008) это хавает) да и программер, который писал эту либу был далеко не дилетантом, думаю какой то логичный смысл в этом есть
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance |
![]() |
![]() |
![]() |
#6 |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
![]()
А студия так легко это хавает со всеми оптимизациями?
Попробуй скомпилить с -fkeep-inline-functions |
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 29.05.2009
Сообщений: 320
|
![]()
Если делать инлайновые функции виртуальными, то компилятор сможет их подцепить динамически, так сказать. Кроме того библиотеки придется грузить с помощью dlopen и писать обвертки для конструкторов и деструкторов.
|
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 29.05.2009
Сообщений: 320
|
![]()
Примерно так это выглядит:
Код:
Код:
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Чем отличается описание функции от определения функции в С++? | Go6a | Помощь студентам | 4 | 18.07.2009 18:07 |
Функции. Передача массива в качестве параметра функции. | Wia | Помощь студентам | 2 | 17.03.2009 14:57 |
inline asm в gcc | drRobert | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 0 | 23.08.2008 10:26 |
ошибка в inline функции | Tan4ik | Помощь студентам | 2 | 04.05.2008 21:26 |
inline??? | пыхта4ог | Общие вопросы C/C++ | 2 | 09.11.2007 17:54 |