0

你好亲爱的互联网,

所以,我已经下载了在此处找到的 clAmdFft 库。

我也做了这个,(将源文件/库添加到编译器/系统路径)。他们是事后的:

echo $LIBRARY_PATH
/usr/lib:/opt/clAmdFft-1.10.321/lib64:/usr/lib:
echo $C_INCLUDE_PATH
/opt/clAmdFft-1.10.321/include:
echo $LD_LIBRARY_PATH
/opt/clAmdFft-1.10.321/lib64:/opt/clAmdFft-1.10.321/lib32:/usr/lib:/usr/local/cuda/lib64:/usr/local/cuda/lib::/opt/clAmdFft-1.10.321

这是我想在其中使用此库的 .cpp 文件之一的顶部:

// AMD APPML FFT
#include <clAmdFft.h>
// IVE TRIED THESE TOO
//#include "clAmdFft.h"
//#include <clAmdFft>

最后,这是我的甜蜜 Makefile,(这里没有什么复杂的,我以前一直这样做)

#
#
#  Compile Super Mega Awesome Program For Winners
#
#
#

# -std=c++0x is required for using <chrono>

objects =  L1.o L2.o L3.o 
sharedObjects = SL1.so
exec = SL1
GCC=gcc
GPP=g++
CFLAGS= -I /usr/local/cuda/include -g
LDFLAGS = -L /usr/lib -lOpenCL

# This apparently addresses linking problems w/ clAmdFft & NVIDIA drivers
LDFLAGS += -Wl,--unresolved-symbols=ignore-in-shared-libs

SL1: 
        $(GPP) $(CFLAGS) -o L1.o -c -std=c++0x -fPIC main.cpp       
        $(GPP) $(CFLAGS) -o L2.o -c -fPIC L2.cpp
        $(GPP) $(CFLAGS) -o L3.o -c -fPIC L3.cpp
        $(GPP) $(CFLAGS) -Wall -shared  -o $(sharedObjects) $(objects)
        $(GPP) $(sharedObjects) -o $(exec) -g $(LDFLAGS)

.PHONY : clean
clean: 
        rm $(objects) $(sharedObjects) $(exec)




#EOF

那么,亲爱的互联网,为什么我会收到以下错误?

L3.cpp:24:22: fatal error: clAmdFft.h: No such file or directory
compilation terminated.

我的意思是这看起来很简单。在快速浏览了这个网站以及一般的谷歌之后,我似乎无法找到一个可靠的答案来解释为什么这不能正常工作喵。希望大家能帮忙!谢谢。

4

1 回答 1

1

如评论中所述,添加是我解决此特定问题的首选方法-I /opt/clAmdFft-1.10.321/includeCFLAGS= -I /usr/local/cuda/include -g

至于如何使用C_INCLUDE_PATH,从技术上讲,您的用法是正确的——除非您不是使用编译代码,gcc而是使用编译g++,因此您应该使用CPLUS_INCLUDE_PATH.

这是一个编译示例(未显示我的 xemacs 会话创建 testing.cpp 和 testing.h - testing.cpp 只是在做#include <testing.h>(其中包含我正在打印的简单定义)。

$ mkdir ../testing
$ export C_INCLUDE_PATH=../testing
$ g++ -Wall testing.cpp
testing.cpp:2:21: fatal error: testing.h: No such file or directory
compilation terminated.
$ export CPLUS_INCLUDE_PATH=../testing
$ g++ -Wall testing.cpp

但是,使用 makefile 的全部意义在于它们定义了您从何处获取的内容。使用全局环境变量只会导致您的项目,具体取决于系统上每个用户配置的C_INCLUDE_PATHCPLUS_INCLUDE_PATH.

同样,如果您最终将项目从一台机器移动到另一台机器,如果所有包含路径等都在 makefile 中,您可以复制项目文件 [当然,安装依赖项 - 尽管您可以拥有makefile 也这样做,如果你在它上面工作]。如果您依赖CPLUS_INCLUDE_PATH之类的,您最终还必须去编辑您的 .bashrc 或其他任何东西。

(而且我今天学到了一些新东西,我什至不知道这些环境变量的存在)。

于 2013-06-21T23:35:40.070 回答