Линковка динамической библиотеки в gcc
У меня следующий вопрос: я пишу в IDE QNX Momentics со встроенным компилятором gcc и мне нужно прилинковать вместо libc.so (которая идет в составе IDE) свою версию libc, только проблема в том, что у моей версии libc расширение *.dll (!) следовательно опция "-l" ориентируется на "*.a" и "*.so", а мне нужно на "*.dll"
Моя версия libc.dll взята с целевой системы QNX Neitrino, имеет формат ELF. На борту целевой системы все библиотеки имеют расширение *.dll.
Подскажите, как линковать dll-библиотеки в gcc?
Динамические библиотеки подгружаются программой уже в процессе работы.
Хорошо, если вы так считаете, то скажите мне пожалуйста, откуда тогда берется таблица импорта?
Похоже на ваш случай. Это чтобы стандартные библиотеки автоматически не линковать.
А вот по части расширения в QNX.....
Я, конечно, не специалист в QNX, но всегда считал что это Unix-like OS и, соответственно, попахивает ересью: *.dll в Unix-like операционной системе??!
Всегда были *.so для динамического связывания. dll - это в Windows.
Переспрошу, вы точно ничего не путаете?
Можно попробовать что-нибудь вроде этого:
Код:
ln -s libc.dll mylibc.so
gcc -nostdlib -L. -lmylibc -o prog prog.c
gcc -nostdlib -L. -lmylibc -o prog prog.c
я пробовал с -nostlib, стандартные библиотеки из поиска исключает, но libc.dll найти не может, я же говорю, что опция -l ищет по шаблону "lib + name + "a || .so"
-nostdlib и -nodefaultlib : разные вещи! прочитайте man
Не всё стащил. Кроме dll должна быть и a, В ней нет исполняемого кода, она только указывает, где в dll он есть.
-l namespec
--library=namespec
Add the archive or object file specified by namespec to the list of files to link. This option may be used any number of times.
If namespec is of the form :filename, ld will search the library path for a file called filename, otherwise it will search the
library path for a file called libnamespec.a.
--library=namespec
Add the archive or object file specified by namespec to the list of files to link. This option may be used any number of times.
If namespec is of the form :filename, ld will search the library path for a file called filename, otherwise it will search the
library path for a file called libnamespec.a.
а что делать если libc.a для моей libc.dll нету?
это.
Читать
Цитата: grgdvo
Есть такая опция: -nodefaultlibs
Похоже на ваш случай. Это чтобы стандартные библиотеки автоматически не линковать.
А вот по части расширения в QNX.....
Я, конечно, не специалист в QNX, но всегда считал что это Unix-like OS и, соответственно, попахивает ересью: *.dll в Unix-like операционной системе??!
Всегда были *.so для динамического связывания. dll - это в Windows.
Переспрошу, вы точно ничего не путаете?
Похоже на ваш случай. Это чтобы стандартные библиотеки автоматически не линковать.
А вот по части расширения в QNX.....
Я, конечно, не специалист в QNX, но всегда считал что это Unix-like OS и, соответственно, попахивает ересью: *.dll в Unix-like операционной системе??!
Всегда были *.so для динамического связывания. dll - это в Windows.
Переспрошу, вы точно ничего не путаете?
точно ничего не путаю, расширение там *.dll