gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 07:33:15 26 4
gpt4 key购买 nike

您好亲爱的互联网,

所以,我下载了找到的 clAmdFft 库 here .

我也继续做 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.

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

最佳答案

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

关于如何使用C_INCLUDE_PATH , 从技术上讲你的用法是正确的——除非你没有用 gcc 编译代码但是用g++因此你应该使用 CPLUS_INCLUDE_PATH .

这是一个编译示例(未显示我的 xemacs session 创建 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 或其他任何东西。

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

关于C++ - 使用 AMD 源库的链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17245070/

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