Форум программистов, компьютерный форум, киберфорум
C (Си)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 30.05.2013
Сообщений: 4

Проверка dlopen в configure

30.05.2013, 12:44. Показов 2607. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь скомпилировать под виндовым MinGW одну прогу. Ей нужен dlfcn.h, поэтому воспользовался http://code.google.com/p/dlfcn-win32/
Проверка dlfcn.h в configure проходит, а вот проверка самой функции dlopen валится. Понимаю, что править configure легче, но хочу сделать, чтоб любая подобная программа компилировалась автоматически, без правки исходника.
Проверка следующая:
configure:13337: checking for dlopen
configure:13337: gcc -o conftest.exe -g -O2 -D_WIN32 -fno-builtin conftest.c >&5
In function `main':
conftest.c:116: undefined reference to `dlopen'
collect2.exe: error: ld returned 1 exit status
configure:13337: $? = 1
configure: failed program was:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#define dlopen innocuous_dlopen
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char dlopen (); below.
     Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
     <limits.h> exists even on freestanding compilers.  */
 #ifdef __STDC__
 # include <limits.h>
 #else
 # include <assert.h>
 #endif
 #undef dlopen
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
 #ifdef __cplusplus
 extern "C"
 #endif
 char dlopen ();
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined __stub_dlopen || defined __stub___dlopen
 choke me
 #endif
 int main ()
 {
 return dlopen ();
   ;
   return 0;
 }
Кто-нибудь может объяснить, как этот код может вообще компилироваться (даже на линуксе), если не только dlfcn.h не включен, но ещё и dlopen - undef? Хочу понять, что нужно сделать, чтоб MinGW под виндой вела себя аналогичным образом.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.05.2013, 12:44
Ответы с готовыми решениями:

Принцип работы с dlopen, dlsym
Всем добрый день! Прошу поправить меня если что-то не так понимаю. Проведена такая аналогия: если в C++ Windows тип HISTANCE lib,...

Подключить плагин с помощью dlopen
Здраствуйте, у меня такой вопрос, если в с# плагин можно подключать через dlopen(dlsym), а как можно подключить тот же ...

Работа dlopen. dlerror выдает, что нет такого каталога или файла
Почему не работает dlopen: пишу простой пример с загрузкой void * Lib = dlopen (&quot;libqmng.so&quot;, RTLD_LAZY); if (!Lib) { ...

6
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
30.05.2013, 15:37
В виндах, насколько я знаю, нет dlopen, только LoadLibrary.
В линуксах же собирается без проблем, надо только библиотеку соответствующую подключить(libdl).
0
0 / 0 / 0
Регистрация: 30.05.2013
Сообщений: 4
30.05.2013, 17:29  [ТС]
Как раз и хочу, чтоб было в виндах, для этого пытаюсь прикрутить упомянутую выше dlfcn-win32, реализующую POSIX-функции через win32 типа того же LoadLibrary. -ldl (dlfcn-win32 собирается в libdl.a и libdl.dll.a) тоже делаю - не помогает. Можно объяснить, почему в линуксах собирается без проблем? Если ни include, ни чего - как линкер знает, что функция есть? И в чём суть этого финта ушами с объявлением char dlopen ();, если нормальный прототип выглядит как void *dlopen ( const char *file, int mode ); ?
0
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
30.05.2013, 17:50
Цитата Сообщение от Gauri Посмотреть сообщение
сли ни include, ни чего - как линкер знает, что функция есть? И в чём суть этого финта ушами с объявлением char dlopen ();, если нормальный прототип выглядит как void *dlopen ( const char *file, int mode ); ?
Линкер ничего не знает ни про какие инклюды. прототип объявлен, функция есть в libdl, больше ничего не надо. Зачем меняли прототип, написано в комменте. А не собирается у вас потому, что библиотеку здесь
gcc -o conftest.exe -g -O2 -D_WIN32 -fno-builtin conftest.c >&5
так и не попросили прилинковать.
0
0 / 0 / 0
Регистрация: 30.05.2013
Сообщений: 4
30.05.2013, 18:09  [ТС]
Говорю же, с -ldl тоже пробовал - результат тот же. Почему char dlopen должен слинковаться, если в libdl есть void *dlopen ? Чистый C (без плюсов) ведь не поддерживает перегрузки.

Добавлено через 12 минут
Так, с одним косяком разобрался:
gcc -o conftest.exe -g -O2 -ldl -D_WIN32 -fno-builtin neww.c не работало
gcc -o conftest.exe -g -O2 -D_WIN32 -fno-builtin neww.c -ldl заработало
Опять нарвался на старый косяк gcc с порядком указания библиотек...

Но вопрос остаётся в силе: почему линкуется функция с char, если объявлена в библиотеке void?
0
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
30.05.2013, 20:43
Цитата Сообщение от Gauri Посмотреть сообщение
Но вопрос остаётся в силе: почему линкуется функция с char, если объявлена в библиотеке void?
Потому, что линкер смотрит только на имя экспортируемого символа.
1
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
30.05.2013, 21:16
Цитата Сообщение от Gauri Посмотреть сообщение
Но вопрос остаётся в силе: почему линкуется функция с char, если объявлена в библиотеке void?
это же си, или extern "C"
технически отличие плюсовых функций от неплюсовых - то что плюсовые функции компилятор декорирует (те добавляет в имя функции информацию об аргументах/возвращаемом значении, так как иначе компилятор не осилит перегрузку), а в сишных нет
поэтому линковщик не различает сигнатуры для такого символа
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.05.2013, 21:16
Помогаю со студенческими работами здесь

[Gentoo] Ошибки X -configure
Устанавливаю xorg-x11. при # startx выводит: Fatal server error: no screens found. при # X -configure выводит: List of video...

MakeFile configure CMake
Друзья, прошу вас о помощи. Немогу доделать работу, посмотрите где ошибся. некоторые файлы я немогу написать. MakeFile: compile:...

Ошибка Could not configure driver
Всем привет. Не первый день имею дело с линуксами, просто фигео от расбиана. По порядку. 1 ============== Подключаю USB WIFI Модель...

Не открывается Configure Java
Прошу прощения если не там создана тема, похожего раздела не выдал. Суть проблемы такая, компьютер не видит Java, браузеры тоже не...

mingw ./configure --prefix
Добрый день. Собираю gstreamer под винду. Где посмотреть толковое объяснение значения опции prefix? Или может, кому-то не лень...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru