由于在使用g ++时共享库中可用的头文件导致的编译错误

时间:2012-03-21 21:59:19

标签: linker g++ shared-libraries

我有一个 /usr/lib/libtiff.so.3 作为 /usr/lib/i386-linux-gnu/libtiff.so.4.3.3的符号链接< / em>的。我需要使用一个名为 tiffio.h 的文件中声明的一些数据结构,它是上面提到的tiff库的一部分,用于处理我的c ++源代码中的.tif图像文件。 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 个答案:

答案 0 :(得分:3)

这取决于你的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 ++调用中。