将C ++库添加到eclipse C ++项目中

时间:2015-04-16 18:44:50

标签: c++ linux raspberry-pi eclipse-cdt

我正在尝试将现有库添加到Eclipse。我在Eclipse IDE上使用cross compiler用于C ++,安装在虚拟linux debian机器上。

找到mmapGpio lib here

/mmapGpioBasicRev1.tar.gz有一个cpp和一个h文件以及一个小型演示程序。

我编译了这段代码没有问题。生成.o文件。我已使用ar -q libmmapGpio.a mmapgpio.o

成功归档了该文件

我已将libmmapGpio.a放入~/.../UserLib directory 我已将mmapGpio.h放在~/.../UserInclude

此时一切正常。

我打开一个使用mmapGpio库的新项目:

#include "mmapGpio.h"
#include "stdio.h"

int main(void){
    mmapGpio rpiGpio; // instantiate an instance of the mmapGpio class
    rpiGpio.setPinDir(17,mmapGpio::OUTPUT); // set GPIO17 to output
    while(1) {// toggle pin as fast as possible
           rpiGpio.writePinHigh(17);
           rpiGpio.writePinLow(17); 
    }

    return 0;
}

所以完成了交叉编译,但链接器说cannot find -llibmapGpio

我已在物业项目中作出声明; C / C ++一般

  • 包含路径:/home/octopuss/rpi/UserInclude(mmapGpio.h文件)
  • 库路径:/home/octopuss/rpi/UserLib(libmmapGpio.a文件)
  • 图书馆:libmmapGpio

为什么我会收到此消息?

详细信息 - >控制台视图

03:16:30 **** Build of configuration Debug for project Gpio1 ****
make all 
Building file: ../Gpio1.cpp
Invoking: Cross G++ Compiler
arm-linux-gnueabihf-g++ -I/home/octopuss/rpi/UserInclude -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"Gpio1.d" -MT"Gpio1.d" -o "Gpio1.o" "../Gpio1.cpp"
Finished building: ../Gpio1.cpp

Building target: Gpio1
Invoking: Cross G++ Linker
arm-linux-gnueabihf-g++ -L/home/octopuss/rpi/UserLib -o "Gpio1"  ./Gpio1.o   -lmmapGpio
/home/octopuss/rpi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld: skipping incompatible /home/octopuss/rpi/UserLib/libmmapGpio.so when searching for -lmmapGpio
/home/octopuss/rpi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lmmapGpio
collect2: error: ld returned 1 exit status
make: *** [Gpio1] Erreur 1

错误:

  • 在搜索-lmmapGpio时跳过不兼容的/home/.../UserLib/libmmapGpio.so
  • ld:找不到-lmmapGpio

2 个答案:

答案 0 :(得分:1)

  

“为什么这条消息?”

这是因为通过您的设置,链接器实际上会查找名为liblibmmapGpio.a的库文件。

  

“...所以交叉编译已完成,但链接器说”找不到-llibmapGpio“!   ...
    - 库:libmmapGpio“

您只需在链接器库设置中指定不带lib前缀的库:

mmapGpio

enter image description here

Eclipse CDT Builder将此作为-l选项传递给链接器,链接器会自动扩展为在指定的附加路径下搜索 libmmapGpio.a

有关更多插图样本和链接,请参阅此Q& A:
Problems importing libraries to my c++ project, how to fix this?

答案 1 :(得分:0)

我发现问题...我的.so lib不是ARM交叉编译的,所以有一个X86库与我的ARM程序不兼容。

我解决这个问题来设置erm-linuxgnuabihf-前缀和他的交叉设置参数路径。

感谢TTAVAR PEI和Scott Stensland

享受