将静态库链接到ARM的CUDA库时出错

时间:2014-01-06 15:36:25

标签: c++ ubuntu arm static-libraries nvcc

我的问题很容易描述。它并非源于任何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

0 个答案:

没有答案