2009-08-16 2 views
1

Для меня (новичок в C), похоже, что программа может магически обращаться к внешним библиотекам, просто объявив #include "something.h" в верхней части исходного файла C. Как это делается?Использование внешних библиотек в программе C

Я хочу использовать библиотеку POSIX (unistd.h). У меня есть файл заголовка и несколько DLL, но я не могу связать их вместе и получить компилятор (GCC MinGW), чтобы найти dll.

Что такое хороший учебник о том, как создавать и связывать библиотеки DLL и как подключать dll с заголовками C и тому подобное?

ответ

2

Вы ошибаетесь в своих предположениях - заголовочный файл не дает вам волшебного доступа к DLL. Заголовочные файлы не являются библиотеками, и просто наличие заголовка не позволит вам вызывать функции, которые он объявляет. В любом случае MinGW поставляется с unistd.h - вам не нужны никакие дополнительные заголовки или библиотеки DLL, хотя обратите внимание, что не все функции POSIX будут доступны в обычной среде Windows. Если вы хотите создать среду POSIX в Windows, используйте Cygwin, а не MinGW.

1

Файл .h служит только для того, чтобы ваша программа знала, какие точки входа будут доступны при компиляции-связывании.

Я рекомендую вам проверить документацию вашего компилятора, чтобы узнать, как указать ссылку .dll.

Возможно, вы, возможно, начнете поиск флага типа -l, чтобы указать импортированную .dll.

0

C просто ужасно: подключение правильных DLL с файлами .h является полностью до программиста. Существует много соглашений о программировании и файловой системе, легко ошибиться, и начинающим учителям трудно учиться.

A a назад я написал short handout on compiling and linking with Unix libraries. Детали не то же самое в Windows, но я надеюсь, что эти концепции могут быть полезными.

+0

Shock! Ужастик! Программисты должны знать, что они делают! Какая смешная идея! Но, конечно, это неправда - MinGW, например, утверждает, что DLL с исполняемой средой C получает ссылку, как и все другие системы компиляции C, с которыми я столкнулся. Конечно, если вы хотите использовать нестандартные функции, вам нужно связать нестандартные библиотеки. – 2009-08-16 21:22:32

+0

@Neil: Верно. Я как бы забываю, что некоторые люди пишут программы, используя только libc. Конечно, теперь, когда glibc - огромный раздутый свиньи, это более разумное предложение, которое когда-то было. –

1

Хотя ответы Нила и Нормана технически правильны, некоторые компиляторы, такие как MSVC, фактически позволяют чистому #include магически ссылаться на правильную библиотеку. Это достигается с помощью специальной директивы внутри включенного .h файл, который выглядит следующим образом:

#pragma комментарий (Пб "Library.lib")

или

# прагма комментарий (линкер, «/DELAYLOAD:library.dll»)

компилятор затем встраивает комментарий в сгенерированных объектных файлов (.o или .obj) и л Inker извлекает его и добавляет к его вариантам.

Смежные вопросы