设置库包括c中的路径

我刚安装gd2使用mac端口(sudo安装gd2),它们在以下位置安装了库:
/opt/local/include/gd.h
/opt/local/lib/libgd.dylib (link)
/opt/local/lib/libgd.la
/opt/local/lib/libgd.a

这是我的制作文件

dev: main.o
    g++ -L/opt/local/lib -I/Opt/local/include -lgd -lpng -lz -ljpeg -lfreetype -lm main.o -o heatmap

main.o: main.cpp
    g++ -c main.cpp

所以当我创建我的c应用程序,我添加’#include“gd.h”’,它抛出:

main.cpp:4:16: error: gd.h: No such file or directory

如果我将gd.h设置为绝对路径(如上所述)(不是解决方案,而是好奇),我被抛出:

g++ -L/opt/local/include -L/opt/local/lib main.o -o heatmap
Undefined symbols:
  "_gdImagePng",referenced from:
      _main in main.o
  "_gdImageLine",referenced from:
      _main in main.o
  "_gdImageColorAllocate",referenced from:
      _main in main.o
      _main in main.o
  "_gdImageDestroy",referenced from:
      _main in main.o
  "_gdImageCreate",referenced from:
      _main in main.o
  "_gdImageJpeg",referenced from:
      _main in main.o
ld: symbol(s) not found

所以,我明白这意味着ld找不到它需要的库(因此试图用“-L”值给它提示).所以在给出了#提示绝对路径#include之后,我可以让它工作,但我不认为我必须这样做,我如何使g / ld搜索在图书馆的正确的地方?

德鲁·桑恩

PS.使用:
– OSX 10.6.2
– gcc version 4.2.1(Apple Inc. build 5646)(点1)

编辑:
好的,所以在考虑了stfanB和Michael的答案之后,我已将gd重新编译到本地目录(库)中,因此,我已经将Makefile的第一行(我将定义检出cmake)更改为g -L. / libraries / lib -I./libraries/include -lgd -lpng -lz -ljpeg -lfreetype -lm main.o -o heatmap
但是我仍然得到main.cpp:3:16:error:gd.h:没有这样的文件或目录

编辑:
感谢所有的答案,这是我的最后(工作)makefile为任何人谁想要一个答案:

dev: main.o
    g++ -I./libraries/include -L./libraries/lib -lgd -lpng -lz -ljpeg -lfreetype -lm main.o -o heatmap

main.o: main.cpp
    g++ -I./libraries/include -c main.cpp

解决方法

我强烈建议您使用 CMake(如果您想要了解更多信息,请观看 CMake Google Techtalk),因为它将使您的生活更轻松,大大简化了与各种图书馆的定位和链接.也就是说,我相信你的调用问题是你没有指定库,你可以使用-lgd.您的-L / opt / local / lib正确地告诉您查看/ opt / local / lib,但是您从未告诉过要查找的内容.至于找到相应的标题,可以使用-I / opt / local / include将/ opt / local / include放在编译器的include搜索路径中.

如果你注意我使用CMake的建议,这样做会像:

FIND_PACKAGE(GD2 required)
INCLUDE_DIRECTORIES(${GD2_INCLUDE_Dirs})
LINK_DIRECTORIES(${GD2_LIBRARY_Dirs})

ADD_EXECUTABLE(heatmap main Heatmap_Map Heatmap_Point)
TARGET_LINK_LIBRARIES(heatmap ${GD2_LIBRARIES})

如果您有兴趣了解有关CMake的更多信息,您可能需要查看使用CMake构建系统的C++ Application Project TemplateC++ Library Project Template. CMake可以通过MacPorts通过命令“sudo port install cmake”获得.

如果您不想安装CMake,我还应该指出,有一些环境变量,您可能有兴趣知道如何使您的生活更轻松,即:

> CPATH
> LIBRARY_PATH
> DYLD_FALLBACK_LIBRARY_PATH

CPATH环境变量很像PATH环境变量(它是冒号分隔的目录列表),除了该变量中的目录将自动由gcc和g使用,就像在命令行中使用-I标志指定的那样(即将在这些路径中搜索文件). LIBRARY_PATH是等效的,除了它像文件夹一样给予-L(即,库将在该路径中自动搜索).动态链接器将使用DYLD_FALLBACK_LIBRARY_PATH(因此您应该将LIBRARY_PATH中的路径包含到此变量中).

您可以在链接中阅读有关environment variables affecting gcc的更多信息.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...