heraldww 2024-10-21 21:21 采纳率: 29.2%
浏览 9
已结题

树莓派链接错误? 变量未定义?

树莓派 链接错误? 变量 未定义,可是我包含了这些函数的源代码啊

为啥提示我链接找不到函数?我哪里错了? 我折腾了两天了
这个是我的代码:


#include <stdio.h>
#include <unistd.h>
#include <gpio.h> //控制gpio的库

//-----------------------------------------------------
#define KEY 41
#define LED 42
// 使用gpio pins命令查看得到这两个引脚编号
//-----------------------------------------------------
//-----------------------------------------------------

void debug_gpio_001()
{
    pin_set_mode(LED, OUTPUT);
    pin_set_mode(KEY, INPUT);
    pin_set_pullUpDn(KEY, PULL_UP); //开启内部上拉
    while (1)
    {
        if (pin_read(KEY) == 0)
            pin_write(LED, 1);
        else
            pin_write(LED, 0);
    }
    //return 0;
}

int main()
{
    printf("%s 向你问好!\n", "cpp_h618");
    return 0;
}

以下是链接错误提示:


root@WalnutPi:~/projects/cpp_h618# make
[ 33%] Linking C executable h618Car
/usr/bin/ld: CMakeFiles/h618Car.dir/usr/lib/walnutpi/gpioc/libgpio/board.c.o: in function `pin_get_mode':
board.c:(.text+0x220): undefined reference to `gpio_get_mode'
/usr/bin/ld: CMakeFiles/h618Car.dir/usr/lib/walnutpi/gpioc/libgpio/board.c.o: in function `pin_set_mode':
board.c:(.text+0x258): undefined reference to `gpio_set_mode'
/usr/bin/ld: CMakeFiles/h618Car.dir/usr/lib/walnutpi/gpioc/libgpio/board.c.o: in function `pin_set_pullUpDn':
board.c:(.text+0x324): undefined reference to `gpio_set_pullUpDn'
/usr/bin/ld: CMakeFiles/h618Car.dir/usr/lib/walnutpi/gpioc/libgpio/board.c.o: in function `pin_read':
board.c:(.text+0x364): undefined reference to `gpio_read'
/usr/bin/ld: CMakeFiles/h618Car.dir/usr/lib/walnutpi/gpioc/libgpio/board.c.o: in function `pin_write':
board.c:(.text+0x39c): undefined reference to `gpio_write'
/usr/bin/ld: CMakeFiles/h618Car.dir/usr/lib/walnutpi/gpioc/libgpio/board.c.o: in function `pin_get_mode_name_now':
board.c:(.text+0x3e4): undefined reference to `gpio_pin_get_mode_name'
/usr/bin/ld: CMakeFiles/h618Car.dir/usr/lib/walnutpi/gpioc/libgpio/board.c.o: in function `pin_get_mode_name_by_num':
board.c:(.text+0x42c): undefined reference to `gpio_pin_get_mode_name_by_num'
/usr/bin/ld: CMakeFiles/h618Car.dir/usr/lib/walnutpi/gpioc/libgpio/board.c.o: in function `soft_pwm_set_duty_cycle':
board.c:(.text+0x464): undefined reference to `pwm_set_duty_cycle'
/usr/bin/ld: CMakeFiles/h618Car.dir/usr/lib/walnutpi/gpioc/libgpio/board.c.o: in function `soft_pwm_set_frequency':
board.c:(.text+0x4a4): undefined reference to `pwm_set_frequency'
/usr/bin/ld: CMakeFiles/h618Car.dir/usr/lib/walnutpi/gpioc/libgpio/board.c.o: in function `soft_pwm_get_duty_cycle':
board.c:(.text+0x4e4): undefined reference to `pwm_get_duty_cycle'
/usr/bin/ld: CMakeFiles/h618Car.dir/usr/lib/walnutpi/gpioc/libgpio/board.c.o: in function `soft_pwm_get_frequency':
board.c:(.text+0x51c): undefined reference to `pwm_get_frequency'
/usr/bin/ld: CMakeFiles/h618Car.dir/usr/lib/walnutpi/gpioc/libgpio/board.c.o: in function `soft_pwm_start':
board.c:(.text+0x54c): undefined reference to `pwm_start'
/usr/bin/ld: CMakeFiles/h618Car.dir/usr/lib/walnutpi/gpioc/libgpio/board.c.o: in function `soft_pwm_stop':
board.c:(.text+0x584): undefined reference to `pwm_stop'
/usr/bin/ld: CMakeFiles/h618Car.dir/usr/lib/walnutpi/gpioc/libgpio/board.c.o: in function `soft_pwm_exists':
board.c:(.text+0x5c4): undefined reference to `pwm_exists'
/usr/bin/ld: CMakeFiles/h618Car.dir/usr/lib/walnutpi/gpioc/libgpio/board.c.o: in function `print_pin_by_search_all_mode_name':
board.c:(.text+0x1030): undefined reference to `gpio_pin_get_mode_name_by_num'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/h618Car.dir/build.make:113: h618Car] Error 1
make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/h618Car.dir/all] Error 2
make: *** [Makefile:91: all] Error 2
root@WalnutPi:~/projects/cpp_h618#


最后,这个是我的cmake文件

  • 写回答

2条回答 默认 最新

  • heraldww 2024-10-21 21:45
    关注

    他提供了一个libgpio.so的动态库,并没有提供.a文件的静态库。那我target_link_libraries要怎么写呢?
    这个是我的cmake文件

    
    ```c
    cmake_minimum_required(VERSION 3.0.0)
    #project(h618Car VERSION 0.1.0 LANGUAGES C CXX)
    
    # 设置 C++ 标准
    #set(CMAKE_CXX_STANDARD 11)
    set(CMAKE_C_STANDARD 99)
    #set(CMAKE_CXX_STANDARD_REQUIRED True)
    set(gpio_libary_locate "/usr/lib/walnutpi/gpioc/libgpio")
    project(h618Car)
    set(CMAKE_INCLUDE_CURRENT_DIR ON)
    include_directories(
                        "${PROJECT_BINARY_DIR}"
                        "${gpio_libary_locate}"
                        )
    
    link_directories(
                        "${gpio_libary_locate}"
                    )
    #file(GLOB SOURCES "${PROJECT_SOURCE_DIR}/*.cpp")
    
    message ("PROJECT_NAME = ${PROJECT_NAME}" )
    message ("PROJECT_BINARY_DIR = ${PROJECT_BINARY_DIR}" )
    message ("INCLUDE_DIRECTORIES    =${INCLUDE_DIRECTORIES}")
    
    add_executable(    ${PROJECT_NAME}    main.c ${gpio_libary_locate}/board.c)
    #target_link_libraries(    ${PROJECT_NAME}  libgpio.so)
    
    
    
    我搜索到的所有libgpio文件如下:
    
    
    
    
    ```c
    root@WalnutPi:~/projects/cpp_h618# locate libgpio
    /usr/lib/libgpio.so
    /usr/lib/walnutpi/Adafruit_Blinka/src/adafruit_blinka/microcontroller/amlogic/a311d/pulseio/libgpiod_pulsein
    /usr/lib/walnutpi/Adafruit_Blinka/src/adafruit_blinka/microcontroller/amlogic/a311d/pulseio/libgpiod_pulsein.license
    /usr/lib/walnutpi/Adafruit_Blinka/src/adafruit_blinka/microcontroller/amlogic/a311d/pulseio/libgpiod_pulsein64
    /usr/lib/walnutpi/Adafruit_Blinka/src/adafruit_blinka/microcontroller/amlogic/a311d/pulseio/libgpiod_pulsein64.license
    /usr/lib/walnutpi/Adafruit_Blinka/src/adafruit_blinka/microcontroller/amlogic/meson_g12_common/pulseio/libgpiod_pulsein
    /usr/lib/walnutpi/Adafruit_Blinka/src/adafruit_blinka/microcontroller/amlogic/meson_g12_common/pulseio/libgpiod_pulsein.license
    /usr/lib/walnutpi/Adafruit_Blinka/src/adafruit_blinka/microcontroller/bcm283x/pulseio/libgpiod_pulsein
    /usr/lib/walnutpi/Adafruit_Blinka/src/adafruit_blinka/microcontroller/bcm283x/pulseio/libgpiod_pulsein.license
    /usr/lib/walnutpi/Adafruit_Blinka/src/adafruit_blinka/microcontroller/bcm283x/pulseio/libgpiod_pulsein64
    /usr/lib/walnutpi/Adafruit_Blinka/src/adafruit_blinka/microcontroller/bcm283x/pulseio/libgpiod_pulsein64.license
    /usr/lib/walnutpi/Adafruit_Blinka/src/adafruit_blinka/microcontroller/generic_linux/libgpiod_pin.py
    /usr/lib/walnutpi/gpioc/build/temp.linux-aarch64-cpython-311/libgpio
    /usr/lib/walnutpi/gpioc/build/temp.linux-aarch64-cpython-311/libgpio/board.o
    /usr/lib/walnutpi/gpioc/build/temp.linux-aarch64-cpython-311/libgpio/pinctrl-sun50i-h616-r.o
    /usr/lib/walnutpi/gpioc/build/temp.linux-aarch64-cpython-311/libgpio/pinctrl-sun50i-h616.o
    /usr/lib/walnutpi/gpioc/build/temp.linux-aarch64-cpython-311/libgpio/pinctrl-sunxi.o
    /usr/lib/walnutpi/gpioc/build/temp.linux-aarch64-cpython-311/libgpio/pinctrl.o
    /usr/lib/walnutpi/gpioc/build/temp.linux-aarch64-cpython-311/libgpio/pinctrl_py.o
    /usr/lib/walnutpi/gpioc/build/temp.linux-aarch64-cpython-311/libgpio/softpwm.o
    /usr/lib/walnutpi/gpioc/build/temp.linux-aarch64-cpython-311/libgpio/softpwm_py.o
    /usr/lib/walnutpi/gpioc/libgpio
    /usr/lib/walnutpi/gpioc/libgpio/Makefile
    /usr/lib/walnutpi/gpioc/libgpio/board.c
    /usr/lib/walnutpi/gpioc/libgpio/board.h
    /usr/lib/walnutpi/gpioc/libgpio/gpio.h
    /usr/lib/walnutpi/gpioc/libgpio/libgpio.so
    /usr/lib/walnutpi/gpioc/libgpio/pinctrl-sun50i-h616-r.c
    /usr/lib/walnutpi/gpioc/libgpio/pinctrl-sun50i-h616.c
    /usr/lib/walnutpi/gpioc/libgpio/pinctrl-sunxi.c
    /usr/lib/walnutpi/gpioc/libgpio/pinctrl-sunxi.h
    /usr/lib/walnutpi/gpioc/libgpio/pinctrl.c
    /usr/lib/walnutpi/gpioc/libgpio/pinctrl.h
    /usr/lib/walnutpi/gpioc/libgpio/pinctrl_py.c
    /usr/lib/walnutpi/gpioc/libgpio/softpwm.c
    /usr/lib/walnutpi/gpioc/libgpio/softpwm.h
    /usr/lib/walnutpi/gpioc/libgpio/softpwm_py.c
    root@WalnutPi:~/projects/cpp_h618#
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月14日
  • 已采纳回答 4月6日
  • 创建了问题 10月21日