LINUX.ORG.RU

ld не находит символ


0

0

Функция glWindowPos2i нах-ся в библиотеке OPENGL32 (проверено nm), указываю её -lOPENGL32 последним параметром gcc, а она всё равно "undefined reference". Другие функции из OPENGL32 находит.

★★★★★

Вариант получения адреса на glWindowPos2i посредством glXGetProcAddressARB не устраивает? Эта же функция относится к расширению ARB_WINDOW_POS.

Amp ★★★
()
Ответ на: комментарий от rei3er

>какой BIND и VISIBILITY символа?

что за BIND и VISIBILITY? Единственное, что я могу посмотреть - это то, что показывает nm:

00000000 T _glWindowPos2i@8

seiken ★★★★★
() автор топика
Ответ на: комментарий от seiken

> 00000000 T _glWindowPos2i@8

символ в тексте есть и он глобальный, но вот ненужный префикс "_" навевает на мысли, что библиотека была собрана или не gcc или же с каким-то DOS compatible calling convention. в общем, gcc ожидает увидеть символ с именем "glWindowPos2" без всяких префиксов и обламывается.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от rei3er

>readelf -s <library>

мм... дело в том, что это не ELF, а PE (действие происходит в MinGW). В линуксовом libGL bind и visibility соотв. global и default, но в PE я даже не знаю, есть ли такие параметры, dumpbin их не показывает. Как эти параметры могут повлиять на линковку?

seiken ★★★★★
() автор топика
Ответ на: комментарий от klalafuda

нет, с _ линкер работает нормально, иначе у меня бы ни одна функция не слинковалась бы

seiken ★★★★★
() автор топика
Ответ на: комментарий от seiken

> Как эти параметры могут повлиять на линковку?

если VISIBILITY не DEFAULT и BIND не GLOBAL/WEAK, ld не рассматривает его определение для разрешения зависимостей

rei3er
()
Ответ на: комментарий от seiken

Телепаты в отпуске!

> дело в том, что это не ELF, а PE (действие происходит в MinGW).

С этого надо было начинать, и заодно показать, какие именно команды
выполнялись при линковке, на кого nm натравливали.

1. Префикс '_' в именах символов -- это нормально (он есть и в библиотеках,
собранных gcc).
2. Если символ проэкспортирован (читай -- доступен из библиотеки), то в
выхлопе nm наряду с 'T _foobar' обычно есть 'I __imp__foobar'.

Пример:

$ i586-mingw32msvc-nm ~/target/mingw/lib/libgmp.dll.a |grep -e 'mpn_mul_n'
0000000000000000 T ___gmpn_mul_n
0000000000000000 I __imp____gmpn_mul_n

Проверьте, есть ли такое.


> но в PE я даже не знаю, есть ли такие параметры,

Кратко говоря, нету.

> Как эти параметры могут повлиять на линковку?

http://gcc.gnu.org/wiki/Visibility

Dselect ★★★
()
Ответ на: комментарий от seiken

> хотя да, mesa собрана микрософтовским компилятором. Попробую собрать gcc.

Не думаю, что от этого будет какой-то толк.

Dselect ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.