|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
16.10.2009, 02:23 | #1 |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
inline функции
есть динамическая библиотека, написанная на плюсах. в некоторых классах используются 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 |
16.10.2009, 08:09 | #2 |
Новичок
Джуниор
Регистрация: 14.10.2009
Сообщений: 2
|
у меня gcc version 4.3.2 и такая же проблема.Только на linux,но либа кроссплатформенная.Писалась на вин.Я сделал так:
#ifdef __GNUC__ без инлайн #else как было #endif А ты давай версию g++ и полный вывод Последний раз редактировалось gnudimarik; 16.10.2009 в 08:16. |
16.10.2009, 13:23 | #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 |
16.10.2009, 17:14 | #4 |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
Естественно, если функция встраиваемая, то логичный вывод, что у неё нет постоянного адреса и вызывать её нельзя ) Выход - сделать её не inline, другого не вижу )
|
16.10.2009, 17:33 | #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 |
16.10.2009, 17:47 | #6 |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
А студия так легко это хавает со всеми оптимизациями?
Попробуй скомпилить с -fkeep-inline-functions |
17.10.2009, 08:21 | #7 |
Форумчанин
Регистрация: 29.05.2009
Сообщений: 320
|
Если делать инлайновые функции виртуальными, то компилятор сможет их подцепить динамически, так сказать. Кроме того библиотеки придется грузить с помощью dlopen и писать обвертки для конструкторов и деструкторов.
|
19.10.2009, 23:46 | #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 |