ошибка компиляции из-за файла заголовка, который доступен в общей библиотеке при использовании g ++ - PullRequest
2 голосов
/ 22 марта 2012

У меня есть / usr / lib / libtiff.so.3 в качестве символической ссылки на / usr / lib / i386-linux-gnu / libtiff.so.4.3.3 . Мне нужно использовать некоторые структуры данных, объявленные в файле с именем tiffio.h , который является частью упомянутой выше библиотеки tiff, для обработки файлов изображений .tif в моем источнике c ++. Источник c ++ mycode.cpp выглядит следующим образом:

#include <iostream>
#include <tiffio.h>
using namespace std;

int main(int argc, char *argv[]) {

if (argc < 2) {
    cout << "USAGE: mycode <inputimage> <outputimage> "<< endl;
    return (-1);
}
 return 0;
}

Я компилирую исходники с помощью g ++ следующим образом:

g++ -Wall -L/usr/lib mycode.cpp -ltiff -o mycode

Я получаю следующую ошибку:

fatal error: tiffio: No such file or directory. compilation terminated.

Я пытался использовать следующие опции для включения tiffio.h , но ошибка сохраняется.

<tiffio>, "tiffio.h",  extern "C" {"tiffio.h"} and extern "C" {<tiffio.h>}

Я делаю что-то в корне неправильно? Как я могу скомпилировать и связать источник?

1 Ответ

3 голосов
/ 22 марта 2012

Это зависит от того, где находится ваш файл tiffio.h. Если он находится в месте, где ваш g ++ обычно ищет заголовочные файлы, вы можете включить его, используя

#include <tiffio.h>

Если он находится в том же каталоге, что и ваш файл .cpp, вы можете включить его, используя

#include "tiffio.h"

Если это где-то еще, у вас есть две возможности:

Либо добавьте его местоположение в путь поиска, добавив -I pathToLocation к вашему вызову g ++

Или включите его, используя

#include "pathToLocation/tiffio.h"

Каталоги, которые обычно ищут в g ​​++:

/usr/local/include
libdir/gcc/target/version/include
/usr/target/include
/usr/include

Если g ++ не может найти саму библиотеку (файл .so), вы можете добавить ее (с путем) непосредственно к вашему вызову g ++.

...