c++ -使用AMD源库链接错误
C++ - Linking Error Using AMD Source Library
你好亲爱的互联网,
所以,我已经下载了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.
我的意思是这看起来很简单。在快速浏览了这个网站和谷歌之后,我似乎找不到一个可靠的答案,为什么这个不能正常工作。希望你们能帮忙!谢谢。
在评论中,将-I /opt/clAmdFft-1.10.321/include
添加到CFLAGS= -I /usr/local/cuda/include -g
是我解决这个特定问题的首选方法。
至于如何使用C_INCLUDE_PATH
,从技术上讲,你的用法是正确的-除非你不是用gcc
编译代码,而是用g++
,因此你应该使用CPLUS_INCLUDE_PATH
。
#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
。
同样地,如果你最终要把你的项目从一台机器转移到另一台机器,如果所有的包含路径等都在makefile中,你可以复制项目文件[当然,安装依赖关系-尽管你也可以让makefile这样做,如果你在它上面工作的话]。如果你依赖CPLUS_INCLUDE_PATH
之类的,你最终也不得不去编辑你的。bashrc或任何东西。
(我今天学到了一些新东西,我甚至不知道这些环境变量的存在)。
相关文章:
- 静态数据成员的问题-修复链接错误会导致编译器错误
- Visual Studio mkl_link_tool.exe链接错误
- C++ 实现模板单例类时出现链接错误
- 使用类模板的方法链接错误
- MySQL C++连接器链接错误
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- 运行 C++ 单元测试时LNK2005链接错误
- 对 CMake 中'cudaRegisterLinkedBinary'链接错误的未定义引用?
- 链接错误,包括我创建的相同头文件 - C++
- 在Embarcadero C++ Builder中生成的DLL未解决的外部链接错误
- 使用标头保护的多个定义链接错误
- 链接错误:未定义对 stdscr 和 wgetch 的引用
- 使用 Vivek 的 Vcam / 捕获源过滤器构建/链接错误
- 升压program_options中的链接错误
- 使用 g++ 预处理器进行替换会导致链接错误
- 在调试配置中编译工作正常,但发布会给出链接错误
- 相邻矩阵设置链接错误
- 包含常量变量并包含在多个文件中的标头的链接错误
- C++链接错误,我理解但无法解决
- 是什么导致macOS Mojave上的GoogleTest链接错误