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 ファイルの 1 つを次に示します。

// 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/includeことCFLAGS= -I /usr/local/cuda/include -gは、この特定の問題を解決するための私の好ましい方法です。

使用方法についてはC_INCLUDE_PATH、技術的にはあなたの使用法は正しいです - ただし、コードを でコンパイルするのではなく、 でコンパイルするgccのでg++、 を使用する必要がありますCPLUS_INCLUDE_PATH

これはコンパイル例です(testing.cppとtesting.hを作成する私のxemacsセッションは示していません-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

ただし、メイクファイルを使用することの要点は、どこから何をインクルードするかを定義することです。グローバル環境変数を使用すると、システム上の各ユーザーが何を構成したかに応じて、プロジェクトが作成されC_INCLUDE_PATHますCPLUS_INCLUDE_PATH

同様に、プロジェクトをあるマシンから別のマシンに移動することになった場合、すべてのインクルード パスなどが makefile にある場合は、プロジェクト ファイルをコピーするだけで [もちろん、依存関係をインストールできます。 makefile で作業する場合は、それも行います]。などに依存している場合はCPLUS_INCLUDE_PATH、.bashrc なども編集する必要があります。

(そして、今日、私は新しいことを学びました。これらの環境変数が存在することさえ知りませんでした)。

于 2013-06-21T23:35:40.070 に答える