我试图将现有库添加到Eclipse。我将odt_a用于C++和Eclipse IDE,安装在虚拟linux debian计算机上。
mmapGpio库位于cross compiler
/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

  • 为什么会收到此消息?

    详细信息->控制台 View
    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
  • 最佳答案



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



    您只需要在链接器库设置中指定不带lib前缀的库:
    mmapGpio
    Eclipse CDT Builder将其作为-l选项传递给链接器,该链接器会自动扩展为在指定的其他路径下搜索 libmmapGpio.a

    另请参阅此问答以获取更多图解示例和链接:
    Problems importing libraries to my c++ project, how to fix this?

    09-27 23:18