我的问题很容易描述。它并非源于任何CUDA问题,而仅仅是因为我对nvcc编译器和arm交叉编译过程不够满意。我有一个包含两部分的项目:
1)创建库的代码
2)使用该库的代码
我希望这能在运行Ubuntu 12.04的nVidia ARM处理器上运行。我可以为Ubuntu 12.04框编译它,我使用普通的make文件顺利运行。但是,当我尝试执行交叉编译时,尝试读取库文件时出错:
“semaphore.a:无法读取符号:无法识别文件格式”
足够的谈话,这就是我的所作所为:
1)从文件创建库: semaphoreClass 和 semaphoreInterface
生成文件:
PROJECT = semaphore.a
OBJECTS = semaphoreClass.o semaphoreInterface.o
CFLAGS = -Wall -pedantic
all: $(PROJECT)
.cpp.o:
g++-4.6 -L/usr/lib32/ -lstdc++ -std=c++0x $(CFLAGS) $<
$(PROJECT): $(OBJECTS)
ar --target=elf32-i386 -rs $(PROJECT) $(OBJECTS)
2)使用适当的标志调用nvcc命令以创建二进制文件。
生成文件:
EXECUTABLE = semHello.nvcc
SOURCES = semHello.cpp
LIBS = semaphore.a
app: semHello.cpp
/usr/local/cuda/bin/nvcc -o $(EXECUTABLE) $(SOURCES) --compiler-options -std=c++0x $(LIBS)
现在,当我只使用nvcc编译在x64处理器上运行的本机Ubuntu 12.04 64位盒时,一切都很好。
当我这样做但添加交叉编译标志时,我收到一个错误。当我没有使用任何图书馆时,交叉编译工作正常。
生成文件:
EXECUTABLE = semHello.arm
SOURCES = semHello.cpp
LIBS = semaphore.a
NVCCARMFLAGS = -target-cpu-arch ARM -ccbin=/usr/bin/arm-linux-gnueabihf-g++-4.6 -m32
app: semHello.cpp
/usr/local/cuda/bin/nvcc -o $(EXECUTABLE) $(SOURCES) --compiler-options -std=c++0x $(LIBS) $(NVCCARMFLAGS)
错误:
semaphore.a: could not read symbols: File format not recognized
我在 ar 命令中尝试过不同的目标,但没有任何对我有用。感谢所有帮助。
由于
的Henrik