gpt4 book ai didi

c++ - 设置库包含 C++ 中的路径

转载 作者:可可西里 更新时间:2023-11-01 15:42:13 26 4
gpt4 key购买 nike

我刚刚使用 mac 端口安装了 gd2 (sudo install gd2),它在以下位置安装了库:

/opt/local/include/gd.h
/opt/local/lib/libgd.dylib (link)
/opt/local/lib/libgd.la
/opt/local/lib/libgd.a

这也是我的 make 文件:

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”值给它提示)。所以在给 g++ -L 提示和#include 中的绝对路径之后,我可以让它工作,但我不认为我必须这样做,我怎样才能让 g++/ld 搜索 int 正确的库位置?

Drew J. Sonne。

附言。使用: - OSX 10.6.2 - gcc 版本 4.2.1(Apple Inc. build 5646)(第 1 点)

编辑:好的,在考虑了 stfanB 和 Michael 的回答后,我将 gd 重新编译到本地目录(libraries),因此,我更改了 Makefile 的第一行(我将 def 检查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: No such file or directory

编辑:感谢大家的回答,这是我的最终(工作)生成文件,供其他许多想要答案的人使用:

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

最佳答案

与其直接调用 g++,我强烈建议您使用 CMake (如果您想了解更多信息,请观看 CMake Google Techtalk)因为它会让您的生活更轻松,并大大简化定位和链接各种库的过程。也就是说,我认为您的调用存在问题,因为您没有指定库,您可以使用 -lgd 指定库。您的 -L/opt/local/lib 正确地告诉 g++ 在 /opt/local/lib 中查找,但您从未告诉它查找什么。至于找到合适的头文件,您可以使用 -I/opt/local/include/opt/local/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 的更多信息,您可能想看看 C++ Application Project TemplateC++ Library Project Template ,它使用 CMake 构建系统。 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++ - 设置库包含 C++ 中的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2496950/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com