Hello Dearest Internet,
所以,我已经下载了here找到的clAmdFft库。
我还继续完成this,(将源文件/库添加到编译器/系统路径)。他们在这之后是事实:
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.
我的意思是这看起来非常简单。经过对该网站以及谷歌的快速浏览后,我似乎无法找到一个可靠的答案,为什么这不适合喵喵。希望你们能帮忙!感谢。
答案 0 :(得分:1)
在评论中,将-I /opt/clAmdFft-1.10.321/include
添加到CFLAGS= -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_PATH
和CPLUS_INCLUDE_PATH
的内容。
同样,如果你最终将项目从一台机器移动到另一台机器,如果所有include-path等都在makefile中,你可以只复制项目文件[并安装依赖项 - 当然 - 尽管你如果你在它上面工作,也可以使用makefile。如果你依赖CPLUS_INCLUDE_PATH
之类的东西,你最终还是要编辑你的.bashrc或其他什么。
(我今天学到了一些东西,我甚至都不知道存在这些环境变量)。