Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;-使用AMD源库链接错误_C++_Sdk_Gpu_Fft_Amd Processor - Fatal编程技术网

C++ C++;-使用AMD源库链接错误

C++ C++;-使用AMD源库链接错误,c++,sdk,gpu,fft,amd-processor,C++,Sdk,Gpu,Fft,Amd Processor,你好,亲爱的互联网 所以,我下载了找到的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

你好,亲爱的互联网

所以,我下载了找到的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>

我的意思是这看起来很简单。在快速浏览了这个网站以及谷歌之后,我似乎找不到一个确切的答案来解释为什么这个网站现在不起作用。希望你们能帮忙!谢谢。

在评论中,将
-I/opt/clamdft-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
(其中包含我正在打印的一个简单定义)

但是,使用makefiles的关键在于它们定义了从何处包含的内容。根据系统上的每个用户配置的
C_INCLUDE_路径
CPLUS_INCLUDE_路径
,使用全局环境变量只会导致您的项目

同样,如果您最终将项目从一台机器移动到另一台机器,如果所有包含路径等都在makefile中,那么您可以复制项目文件[当然,还可以安装依赖项-尽管您也可以让makefile这样做,如果您使用它的话]。如果您依赖于
CPLUS\u INCLUDE\u PATH
等,那么您最终还必须编辑您的.bashrc或其他内容


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

我建议你需要将
-I/opt/clamdft-1.10.321/include
添加到你的
CFLAGS=-I/usr/local/cuda/include-g行中。哦,天哪,确实做到了(至少,它已经编译,我们将看到实际的实例化:p),谢谢。如果我将它添加到C#INCLUDE_PATH中,我可以问一下为什么需要这样做吗?这不是用于其他源/头/库的全局INCLUDE PATH吗?比如,假设我想使用1000个不同的第三方库,只是为了好玩。有没有一种方法可以让1000个INCLUDE语句和一个用于全局系统链接gcc/g的配置++知道它已经在哪里了吗?谢谢Mats Peterson。你应该回答问题并给出答案,这样我就可以对你的答案进行投票:)我已经添加了一个答案,还涵盖了“C_INCLUDE_PATH”部分。该死,没有足够的代表进行投票。先生,你是美国(瑞典?)的英雄。我知道C_INCLUDE_路径,但不知道CPLUS_INCLUDE_路径。精彩的回应。
#
#
#  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.
$ 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