Могу ли я скомпилировать программу на C, которая зависит от библиотеки, но эта библиотека не является .h файлом, является двоичным файлом, потому что он был скомпилирован раньше? - PullRequest
0 голосов
/ 22 мая 2019

Привет всем, проблема в следующем, у меня есть программа на C (program_a.c), эта программа зависит от некоторых функций, которые она не объявила в своем теле, потому что эти функции находятся в другом файле (library.h)., но у меня нет файла .h или файла .c, только у меня есть скомпилированная версия, которая является двоичным файлом.Могу ли я скомпилировать свою программу и использовать эту библиотеку, которая не является .h или .c файлом?

Ответы [ 2 ]

1 голос
/ 22 мая 2019

Если ваша программа использует функцию func() из этой внешней скомпилированной библиотеки, вам потребуется:

  1. func() объявление - обычно это будетв заголовочном файле (который обычно предоставляется с библиотекой).Если этот файл называется profile.h, вы бы #include взяли его из исходного кода вашей программы, который вызывает func().
  2. func() определение - реализация этогофункция - хотя вы не можете видеть его, он должен быть в двоичном виде этой библиотеки.Вы можете проверить это, запустив nm libprofile.a, который покажет вам имена функций библиотеки (хотя иногда она может не отображаться, если ее символы были удалены при компиляции).

Если у вас нет объявление - ваш код не будет компилироваться.

Если у вас нет определения - ваш код не будет ссылаться.

1 голос
/ 22 мая 2019

Если вы знаете функции в библиотеке, вы можете создать свой собственный library.h, который позволит компилятору преуспеть, и тогда вам просто нужен компоновщик, чтобы убедиться, что library.o (или .a или ...) связаны в.

...