ros大车学习2024.3.28-2024.5.14小结(1)

news2025/1/16 21:07:32

ros一键安装推荐wget http://fishros.com/install -O fishros && . fishros

(原本的资料的是melodic的,因为资料里面的镜像是ubuntu18.04的,而我用的是鲁班猫sk3566,ubuntu20.04,镜像来源于野火官网)首先获取新noetic源码2024.5.13从客服那得到的

https://pan.baidu.com/e/1tBnA_U0iR79Eapx2g7jwGA

然后在板子创建工作空间

mkdir catkin_ws

cd catkin_ws

将源码src文件整个复制到catkin_ws中

之后开始编译

首先编译三个文件(最基本的功能包)

先不讲哪三个,一开始我不知道怎么运行小车,只会运行不知道怎么把鲁班猫板子和下位机连接起来。怎么控制小车运行

所以出现了以下错误

可以看到我并没有用usb线将下位机stm32和板子鲁班猫连接,只是连接一个激光雷达和开启了小车的电源

解决方法:

检查一下ros主控是否接到stm32的串口三,没接的话接一下,接了之后还有这个报错的话,创建一下串口别名 执行下面四步 :

1、 ssh登录(如果是在小车上直接执行,可以忽略这一步)

2、 cd wheeltec_robot/src/turn_on_wheeltec_robot(注意 cd 后面有个空格)

3、 sudo ./wheeltec_udev.sh(注意 sudo 后面有个空格)

4、 拔插串口三 如果第三步执行失败,先执行下面这一步再执行第三步 cd scripts/(注意 cd 后面有个空格) 上面四步执行完成后,执行 ll /dev (是两个小写的L,ll 后面有个空格)查看是否有 wheeltec_controller,有的话就是添加串口别名成功了

讲下sudo ./wheeltec_udev.sh这个操作

可能会遇到这个问题

解决方法:

给文件赋权限

sudo chmod -R 777 src/(我直接给src的文件全部赋予了)

然后这个操作是干的呢

答案是执行脚本文件,用来对串口设备进行串口别名的

然后接下来讲回运行小车最基本需要哪三个功能包

讲个我遇到的问题,因为我的鲁班猫板子是2G的内存,所以运行很卡,很容易在编译的时候卡住

解决方法是

编译出现卡死情况,要扩展缓存后编译,主控可以通过扩展缓存以提高编译稳定性 扩展命令:

sudo dd if=/dev/zero of=/swap bs=1M count=4096
sudo mkswap /swap
sudo chmod 600 /swap
sudo swapon -a /swap

这是用来拓展编译内存的,第一句运行会比较久

然后第二个问题,我们编译的是一开始都是catkin_make,但这是把所有功能包都编译的意思

当我们拿到一大堆功能包时,刚开始应该一个包一个包的去编译,这样能找出错误,这个错误属于哪个包的,而且一下子编译所有包,很容易卡住。

解决方法

catkin_make -DCATKIN_WHITELIST_PACKAGES="包名"

eg:

catkin_make -DCATKIN_WHITELIST_PACKAGES="world_canvas_msgs"

然后我功能包编译好了,线也连上了,串口也对了,就开始运行键盘控制小车的launch文件

出现以下错误:

!!!此时我的ros源码的melodic版的代码,但我是ubuntu20.04

所以当时解决的方法是:

2024.3.28获得的Noetic源码(不要用) 链接: 百度网盘icon-default.png?t=N7T8https://pan.baidu.com/s/14vGCwHFQrigHz9hhCoIUMg

     

但有个问题:

代码里没有robot_pose_ekf这个功能包

但这个可以通过apt安装的

也可以通过我这个链接获取

链接:https://pan.baidu.com/s/1bDe3MNFn3SAyIeMuV6AHVw?pwd=7777
提取码:7777
--来自百度网盘超级会员V5的分享

之后我又遇到一个问题,系统时间的问题,板子一关机,系统的时间就不会走了

需要修改时间后在进行编译

解决方法:

修改文件编译要求修改时间的注意下面两个步骤

1、修改系统时间: sudo date -s "2022-06-15 09:00:00"

2、递归修改当前(终端)文件夹下文件修改时间: find ./* -exec touch {};

参考:

然后下一个问题:当我下好noetic源码进行编译时还是出现之前的错误(所以怀疑跟源码版本没关系):

然后看py文件

解决方法:在python后面加个3

然后代码可以运行了,但车动不了

查看oled屏

电压不对,大车电压正常是20多v以上的

解决方法:

需要打开打车电源

并重新启动一下ros代码

下一个问题激光雷达

思岚的雷达

wheeltec_lidar.launch的型号不对

wheeltec_lidar.launch的内容

解决方法:

(但这个更改错误,因为我不是这个型号,但出现新的问题)

没有carto算法的建图的,这个源码里面不包括。

这个在noetic安装不了的,因为apt安装会显示找不到这个包,目前之后orin系列的主控镜像才有

解决方法:

建图可以换其他算法,

这个只有carto没有,其他都有的,在mappin.launch里面修改

除carto算法,其他都是apt安装的,算法也是,要装其他依赖,只是编译,估计也是用不了的,这里算法的命令,melodic改为noetic

其他的依赖安装查看资料

然后还是有问题

是因为之前的雷达型号还是没选对

解决方法:

修改wheeltec_lidar.launch

然后出现world_canvas包出错

已经编译过了

输入source ./devel/setup.bash,再运行功能

还是一样

sudo chmod -R 777 src/

还是有这个问题

最后解决方法:

用新的

2024.4.1 Noetic源码 链接: 百度网盘

实现激光雷达建图需要编译哪些包?

用新的源码编译卡住了

解决方法:

等一会

这个警告,应该没有影响的,主要看报错

mapserver保存地图错误

可能整体编译,这个包太深了没有编译通过

解决方法:

指定编译这个包

解决方法:

删除掉编译生成build和deve文件夹里这个包,在指定编译

还是有这个错误

不过保存地图的代码,可以运行

之前报错找不到包,现在是是保存地址错了

默认还是官方镜像的路径,自己搭建环境需要修改

note: 需要删除掉编译生成build和deve文件夹里这个包

删除之前编译生成的,会冲突,就需要重新编译成功生成新的文件

编译move_base出错

解决方法:

缺东西了,可以在网上搜一下

启动自主导航出错

方法:

sudo apt install ros-noetic-map-server

在工作空间里面打开终端,输入sudo chmod -R 777 src/

无用

客服问题是:这个看着是因为系统本身缺少内容导致的,并且从您前面你的图看,缺太多了

启动自主导航后。出现警告

这里说的是地图读取不出来

解决方法:

在navigation.launch里面改的

获得一个新的map_server(但还是一样报错)

链接:https://pan.baidu.com/s/1eatccp5vvhtxETu5nG8xGQ?pwd=7777
提取码:7777
--来自百度网盘超级会员V5的分享

error:
/usr/bin/ld: /usr/lib/gcc/aarch64-linux-gnu/9/../../../aarch64-linux-gnu/libSDL_image.so: undefined reference to `SDL_ReadLE16'
/usr/bin/ld: /usr/lib/gcc/aarch64-linux-gnu/9/../../../aarch64-linux-gnu/libSDL_image.so: undefined reference to `SDL_FillRect'
/usr/bin/ld: /usr/lib/gcc/aarch64-linux-gnu/9/../../../aarch64-linux-gnu/libSDL_image.so: undefined reference to `SDL_ReadBE32'
/usr/bin/ld: /usr/lib/gcc/aarch64-linux-gnu/9/../../../aarch64-linux-gnu/libSDL_image.so: undefined reference to `SDL_SetColorKey'
/usr/bin/ld: /usr/lib/gcc/aarch64-linux-gnu/9/../../../aarch64-linux-gnu/libSDL_image.so: undefined reference to `SDL_ClearError'
/usr/bin/ld: /home/cat/hl/wheeltec_robot/devel/lib/libmap_server_image_loader.so: undefined reference to `SDL_FreeSurface'
/usr/bin/ld: /usr/lib/gcc/aarch64-linux-gnu/9/../../../aarch64-linux-gnu/libSDL_image.so: undefined reference to `SDL_MapRGB'
/usr/bin/ld: /usr/lib/gcc/aarch64-linux-gnu/9/../../../aarch64-linux-gnu/libSDL_image.so: undefined reference to `SDL_RWFromFile'
/usr/bin/ld: /usr/lib/gcc/aarch64-linux-gnu/9/../../../aarch64-linux-gnu/libSDL_image.so: undefined reference to `SDL_SetError'
/usr/bin/ld: /usr/lib/gcc/aarch64-linux-gnu/9/../../../aarch64-linux-gnu/libSDL_image.so: undefined reference to `SDL_UpperBlit'
/usr/bin/ld: /usr/lib/gcc/aarch64-linux-gnu/9/../../../aarch64-linux-gnu/libSDL_image.so: undefined reference to `SDL_ReadLE32'
/usr/bin/ld: /usr/lib/gcc/aarch64-linux-gnu/9/../../../aarch64-linux-gnu/libSDL_image.so: undefined reference to `SDL_CreateRGBSurface'
/usr/bin/ld: /usr/lib/gcc/aarch64-linux-gnu/9/../../../aarch64-linux-gnu/libSDL_image.so: undefined reference to `SDL_Error'
/usr/bin/ld: /home/cat/hl/wheeltec_robot/devel/lib/libmap_server_image_loader.so: undefined reference to `SDL_GetError'
collect2: error: ld returned 1 exit status
make[2]: *** [navigation-noetic-devel/map_server/CMakeFiles/map_server.dir/build.make:128:/home/cat/hl/wheeltec_robot/devel/lib/map_server/map_server] 错误 1
make[1]: *** [CMakeFiles/Makefile2:922:navigation-noetic-devel/map_server/CMakeFiles/map_server.dir/all] 错误 2
make: *** [Makefile:141:all] 错误 2
Invoking "make -j4 -l4" failed

我查了网上说这个问题是表示在链接时找不到 SDL_ReadLE16 函数的定义。

这个错误通常表示在链接时找不到 SDL_ReadLE16 函数的定义。这可能是由于以下几种原因之一导致的:

  1. SDL_image 库版本不匹配:你正在使用的 SDL_image 库版本可能不兼容你的 SDL 版本。请确保你的 SDL_image 版本与 SDL 版本匹配,或者尝试更新或降级其中一个库的版本。

  2. 编译选项错误:在编译或链接时可能没有正确地包含 SDL_image 库。请确保在编译命令中包含了正确的 -lSDL_image 选项,以便链接 SDL_image 库。

  3. 依赖关系问题:SDL_image 可能依赖于其他库,而这些库可能没有正确地链接。请检查是否有其他必需的库未链接,然后添加到链接命令中。

  4. SDL 库配置问题:SDL 库可能没有正确地安装或配置。请确保 SDL 库正确安装,并且链接器可以找到它们的位置。

你可以尝试查看编译和链接命令,确保正确地包含了 SDL_image 库,并且所有必需的依赖项都正确链接。

好的,让我们从确认 SDL_image 库版本开始:

  1. 确认 SDL_image 库版本

    • 在终端中输入以下命令来查看已安装的 SDL_image 库的版本:
       
    • apt-cache policy libsdl-image-dev
      
    • 这个命令会显示 SDL_image 库的版本信息,包括安装的版本号以及可用的版本列表。确保安装的版本与你的 SDL 版本兼容。
  • 检查 SDL 版本

    • 如果你不确定已安装的 SDL 版本,你也可以使用类似的命令来查看 SDL 库的版本信息:
       
    • apt-cache policy libsdl2-dev
      
    • 确保安装的 SDL 版本与 SDL_image 版本兼容。
  1. 根据版本兼容性调整

    • 如果你发现 SDL_image 和 SDL 版本不兼容,你可以尝试更新或降级其中一个库的版本,以确保它们之间的兼容性。
    • 如果版本兼容性没有问题,那么我们将继续检查编译选项和依赖关系。

请尝试执行以上步骤,并在确认 SDL_image 和 SDL 版本兼容后进行下一步操作。如果你遇到任何问题或需要更多帮助,请随时告诉我。

问题:cat@lubancat:~/Desktop$ apt-cache policy libsdl-image-dev N: 无法定位软件包 libsdl-image-dev

看起来 libsdl-image-dev 软件包在你的系统中没有被安装。这可能是因为软件源中没有该软件包,或者你的软件源列表不包含它所在的仓库。

你可以尝试更新软件源列表,并尝试安装 libsdl-image-dev 软件包。请在终端中执行以下命令:

 
 

bash

sudo apt update
sudo apt install libsdl-image-dev

这会更新你的软件源列表并安装 SDL_image 开发包。安装完成后,你可以再次运行 apt-cache policy libsdl-image-dev 命令来确认已安装的 SDL_image 版本。

如果你遇到任何问题或需要更多帮助,请随时告诉我。

对于 Ubuntu 20.04,你可以安装以下版本的 SDL 和 SDL_image 库:

  1. SDL 库:Ubuntu 20.04 默认提供了 SDL2 库,可以直接通过 libsdl2-dev 包安装。所以你应该安装 libsdl2-dev

  2. SDL_image 库:同样地,Ubuntu 20.04 默认提供了 SDL2_image 库,你可以通过 libsdl2-image-dev 包来安装。

所以你可以按照之前提供的命令来安装这两个库:

 
 

bash

sudo apt update
sudo apt install libsdl2-dev
sudo apt install libsdl2-image-dev

这将安装适用于 Ubuntu 20.04 的 SDL 和 SDL_image 库。安装完成后,你可以通过查看其版本信息来确认安装是否成功。

如果你需要进一步的帮助,请随时告诉我。

Ubuntu 20.04确认 SDL_image 库版本

要确认在 Ubuntu 20.04 上安装的 SDL_image 库版本,你可以执行以下命令:

 
 

bash

apt-cache policy libsdl2-image-dev

这将显示安装的 SDL_image 库的版本信息,包括安装的版本号以及可用的版本列表。请在终端中执行此命令,并查看输出以确认 SDL_image 库的版本。

重新来

让我们继续在 Ubuntu 20.04 下执行确认 SDL_image 库版本的步骤。请在终端中执行以下命令来查看已安装的 SDL_image 库的版本信息:

 
 

bash

apt-cache policy libsdl2-image-dev

这将显示 SDL_image 库的版本信息。请在终端中执行此命令,并查看输出以确认 SDL_image 库的版本。完成后,请告诉我查看到的版本信息。

运行结果我i
libsdl2-dev:
  已安装: 2.0.10+dfsg1-3
  候选:  2.0.10+dfsg1-3
  版本列表:
 *** 2.0.10+dfsg1-3 500
        500 https://mirrors.ustc.edu.cn/ubuntu-ports focal/universe arm64 Packages
        100 /var/lib/dpkg/status

根据你提供的输出,可以看到已安装的 SDL2 版本为 2.0.10+dfsg1-3。然而,这个命令并没有提供关于 SDL_image 库的版本信息。

为了确认 SDL_image 库的版本,请执行以下命令:

bash

apt-cache policy libsdl2-image-dev

这将显示 SDL_image 库的版本信息。请在终端中执行此命令,并告诉我查看到的版本信息。

cat@lubancat:~$ apt-cache policy libsdl2-image-dev
libsdl2-image-dev:
  已安装: 2.0.5+dfsg1-2
  候选:  2.0.5+dfsg1-2
  版本列表:
 *** 2.0.5+dfsg1-2 500
        500 https://mirrors.ustc.edu.cn/ubuntu-ports focal/universe arm64 Packages
        100 /var/lib/dpkg/status

根据输出,你的系统上安装的 SDL_image 库版本是 2.0.5+dfsg1-2。

接下来,让我们继续执行下一步,检查编译选项。请确保在编译程序时包含了正确的 -lSDL2_image 选项。你可以检查你的编译命令,通常在 Makefile 中定义,或者是在终端中手动输入的。确保你的编译命令中包含了 -lSDL2_image 选项。

在 Ubuntu 20.04 下,使用 SDL2_image 库时,你应该使用 -lSDL2_image-lSDL2 选项来链接相关库。

下面是一个示例的编译命令:

 
 

bash

gcc your_program.c -o your_program -lSDL2 -lSDL2_image

请将 your_program.c 替换为你的源代码文件名,并使用上述的编译命令进行编译。这将确保你的程序正确链接了 SDL2 和 SDL2_image 库。

ubuntu20.04下的ros编译map_server

在 Ubuntu 20.04 下,ros使用 SDL2 库时,你应该使用 -lSDL2_image 和 -lSDL2 选项来链接相关库

在 Ubuntu 20.04 下,ROS 在使用 SDL2 库时,通常会使用 pkg-config 来管理库的链接。你可以通过 pkg-config 获取正确的链接选项,而不需要手动指定 -lSDL2_image-lSDL2

下面是一个示例 CMakeLists.txt 文件,假设你的 ROS 软件包名为 my_package,需要链接到 SDL2 和 SDL2_image 库:

 
 

cmake

cmake_minimum_required(VERSION 3.0.2)
project(my_package)

find_package(catkin REQUIRED COMPONENTS
  roscpp
  # 其他依赖项
)

find_package(SDL2 REQUIRED)
find_package(SDL2_image REQUIRED)

catkin_package(
  # 包信息
)

include_directories(
  ${catkin_INCLUDE_DIRS}
  ${SDL2_INCLUDE_DIRS}
  ${SDL2_IMAGE_INCLUDE_DIRS}
)

add_executable(my_node src/my_node.cpp)

target_link_libraries(my_node
  ${catkin_LIBRARIES}
  ${SDL2_LIBRARIES}
  ${SDL2_IMAGE_LIBRARIES}
)

在这个示例中,我们使用 find_package(SDL2 REQUIRED)find_package(SDL2_image REQUIRED) 来查找 SDL2 和 SDL2_image 库,并在 target_link_libraries 中链接到这些库。

确保你已经正确安装了 SDL2 和 SDL2_image 库,你可以使用以下命令来安装:

 
 

bash

sudo apt-get install libsdl2-dev libsdl2-image-dev

这样就能正确链接 SDL2 和 SDL2_image 库,而不需要手动指定 -lSDL2_image-lSDL2 选项。

CMake Error at navigation-noetic-devel/map_server/CMakeLists.txt:13 (find_package):
  By not providing "FindSDL2_image.cmake" in CMAKE_MODULE_PATH this project
  has asked CMake to find a package configuration file provided by
  "SDL2_image", but CMake did not find one.

  Could not find a package configuration file provided by "SDL2_image" with
  any of the following names:

    SDL2_imageConfig.cmake
    sdl2_image-config.cmake

  Add the installation prefix of "SDL2_image" to CMAKE_PREFIX_PATH or set
  "SDL2_image_DIR" to a directory containing one of the above files.  If
  "SDL2_image" provides a separate development package or SDK, be sure it has
  been installed.


-- Configuring incomplete, errors occurred!
See also "/home/cat/hl/wheeltec_robot/build/CMakeFiles/CMakeOutput.log".
See also "/home/cat/hl/wheeltec_robot/build/CMakeFiles/CMakeError.log".
make: *** [Makefile:1034:cmake_check_build_system] 错误 1
Invoking "make cmake_check_build_system" failed

这个错误提示说明 CMake 在 navigation-noetic-devel/map_server/CMakeLists.txt 文件中无法找到 SDL2_image 库的配置文件。这可能是因为你没有正确安装 SDL2_image 或者 CMake 的模块路径没有包含 SDL2_image 的配置文件位置。

要解决这个问题,你可以尝试以下几个步骤:

  1. 确保你已经正确安装了 SDL2_image 库。可以使用以下命令来安装:

     

    bash

  • sudo apt-get install libsdl2-image-dev
    
  • 检查 SDL2_image 库的安装路径。默认情况下,SDL2_image 库的安装路径应该在 /usr/include/SDL2/usr/lib/x86_64-linux-gnu。你可以通过以下命令确认:

     

    bash

  • ls /usr/include/SDL2
    ls /usr/lib/x86_64-linux-gnu
    
  • 在你的 CMakeLists.txt 文件中添加以下行,指定 SDL2_image 的安装路径:

     

    cmake

  • set(SDL2_IMAGE_DIR /usr/include/SDL2)
    

    请确保将路径 /usr/include/SDL2 替换为你实际的安装路径。

  • 如果步骤 3 仍然无法解决问题,你可以尝试手动设置 CMAKE_MODULE_PATH 变量,告诉 CMake 去哪里查找 SDL2_image 的配置文件。在你的 CMakeLists.txt 文件中添加以下行:

     

    cmake

  • set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} /path/to/sdl2_image/cmake/modules)
    

    请将路径 /path/to/sdl2_image/cmake/modules 替换为你实际的路径。

  • 重新运行 CMake 构建过程,看看问题是否已经解决。

Performing C SOURCE FILE Test CMAKE_HAVE_LIBC_PTHREAD failed with the following output:
Change Dir: /home/cat/hl/wheeltec_robot/build/CMakeFiles/CMakeTmp

Run Build Command(s):/usr/bin/make cmTC_fad99/fast && /usr/bin/make -f CMakeFiles/cmTC_fad99.dir/build.make CMakeFiles/cmTC_fad99.dir/build
make[1]: 进入目录“/home/cat/hl/wheeltec_robot/build/CMakeFiles/CMakeTmp”
Building C object CMakeFiles/cmTC_fad99.dir/src.c.o
/usr/bin/cc   -DCMAKE_HAVE_LIBC_PTHREAD   -o CMakeFiles/cmTC_fad99.dir/src.c.o   -c /home/cat/hl/wheeltec_robot/build/CMakeFiles/CMakeTmp/src.c
Linking C executable cmTC_fad99
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_fad99.dir/link.txt --verbose=1
/usr/bin/cc  -DCMAKE_HAVE_LIBC_PTHREAD    -rdynamic CMakeFiles/cmTC_fad99.dir/src.c.o  -o cmTC_fad99
/usr/bin/ld: CMakeFiles/cmTC_fad99.dir/src.c.o: in function `main':
src.c:(.text+0x48): undefined reference to `pthread_create'
/usr/bin/ld: src.c:(.text+0x50): undefined reference to `pthread_detach'
/usr/bin/ld: src.c:(.text+0x5c): undefined reference to `pthread_join'
collect2: error: ld returned 1 exit status
make[1]: *** [CMakeFiles/cmTC_fad99.dir/build.make:87:cmTC_fad99] 错误 1
make[1]: 离开目录“/home/cat/hl/wheeltec_robot/build/CMakeFiles/CMakeTmp”
make: *** [Makefile:121:cmTC_fad99/fast] 错误 2


Source file was:
#include <pthread.h>

void* test_func(void* data)
{
  return data;
}

int main(void)
{
  pthread_t thread;
  pthread_create(&thread, NULL, test_func, NULL);
  pthread_detach(thread);
  pthread_join(thread, NULL);
  pthread_atfork(NULL, NULL, NULL);
  pthread_exit(NULL);

  return 0;
}

Determining if the function pthread_create exists in the pthreads failed with the following output:
Change Dir: /home/cat/hl/wheeltec_robot/build/CMakeFiles/CMakeTmp

Run Build Command(s):/usr/bin/make cmTC_98d57/fast && /usr/bin/make -f CMakeFiles/cmTC_98d57.dir/build.make CMakeFiles/cmTC_98d57.dir/build
make[1]: 进入目录“/home/cat/hl/wheeltec_robot/build/CMakeFiles/CMakeTmp”
Building C object CMakeFiles/cmTC_98d57.dir/CheckFunctionExists.c.o
/usr/bin/cc   -DCHECK_FUNCTION_EXISTS=pthread_create   -o CMakeFiles/cmTC_98d57.dir/CheckFunctionExists.c.o   -c /usr/share/cmake-3.16/Modules/CheckFunctionExists.c
Linking C executable cmTC_98d57
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_98d57.dir/link.txt --verbose=1
/usr/bin/cc  -DCHECK_FUNCTION_EXISTS=pthread_create    -rdynamic CMakeFiles/cmTC_98d57.dir/CheckFunctionExists.c.o  -o cmTC_98d57  -lpthreads
/usr/bin/ld: 找不到 -lpthreads
collect2: error: ld returned 1 exit status
make[1]: *** [CMakeFiles/cmTC_98d57.dir/build.make:87:cmTC_98d57] 错误 1
make[1]: 离开目录“/home/cat/hl/wheeltec_robot/build/CMakeFiles/CMakeTmp”
make: *** [Makefile:121:cmTC_98d57/fast] 错误 2

这个错误提示表明在编译时找不到pthread库。在你的CMakeLists.txt文件中,你需要确保正确链接pthread库。你可以尝试在CMakeLists.txt中添加以下内容:

 
 

cmake

find_package(Threads REQUIRED)
target_link_libraries(your_target_name Threads::Threads)

将"your_target_name"替换为你的目标可执行文件的名称。这将确保在构建时正确链接pthread库。

另外,你的错误信息中提到了"-lpthreads",这可能是一个拼写错误。正确的库应该是"-lpthread"而不是"-lpthreads"。因此,你也可以尝试将CMakeLists.txt中的"-lpthreads"改为"-lpthread"。

这是CMake Error at navigation-noetic-devel/map_server/CMakeLists.txt:13 (find_package):
  By not providing "FindSDL2_image.cmake" in CMAKE_MODULE_PATH this project
  has asked CMake to find a package configuration file provided by
  "SDL2_image", but CMake did not find one.

  Could not find a package configuration file provided by "SDL2_image" with
  any of the following names:

    SDL2_imageConfig.cmake
    sdl2_image-config.cmake

  Add the installation prefix of "SDL2_image" to CMAKE_PREFIX_PATH or set
  "SDL2_image_DIR" to a directory containing one of the above files.  If
  "SDL2_image" provides a separate development package or SDK, be sure it has
  been installed.


-- Configuring incomplete, errors occurred!
See also "/home/cat/hl/wheeltec_robot/build/CMakeFiles/CMakeOutput.log".
See also "/home/cat/hl/wheeltec_robot/build/CMakeFiles/CMakeError.log".
make: *** [Makefile:1034:cmake_check_build_system] 错误 1
Invoking "make cmake_check_build_system" failed的错误日志

这个错误表明CMake在查找SDL2_image时没有找到相应的包配置文件。要解决这个问题,你可以按照以下步骤进行操作:

  1. 检查SDL2_image是否已安装:确保你的系统上已经安装了SDL2_image库及其开发文件。你可以使用系统包管理器来安装,或者从SDL2_image的官方网站下载并手动安装。

  2. 设置CMAKE_PREFIX_PATH:如果SDL2_image安装在非标准路径下,你可能需要设置CMAKE_PREFIX_PATH环境变量,以便CMake能够找到SDL2_image。你可以在命令行中设置,也可以在CMakeLists.txt文件中设置:

     

    cmake

  • set(CMAKE_PREFIX_PATH "/path/to/SDL2_image")
    

    将"/path/to/SDL2_image"替换为SDL2_image安装的实际路径。

  • 设置SDL2_image_DIR:如果SDL2_image安装了相应的CMake配置文件,你可以直接设置SDL2_image_DIR变量来告诉CMake它的位置。在命令行中设置,或者在CMakeLists.txt文件中设置:

     

    cmake

  1. set(SDL2_image_DIR "/path/to/SDL2_image")
    

    将"/path/to/SDL2_image"替换为SDL2_image配置文件所在的目录。

通过执行以上步骤,你应该能够让CMake正确找到SDL2_image库,并成功配置你的项目。

Performing C SOURCE FILE Test CMAKE_HAVE_LIBC_PTHREAD failed with the following output:
Change Dir: /home/cat/hl/wheeltec_robot/build/CMakeFiles/CMakeTmp

Run Build Command(s):/usr/bin/make cmTC_fad99/fast && /usr/bin/make -f CMakeFiles/cmTC_fad99.dir/build.make CMakeFiles/cmTC_fad99.dir/build
make[1]: 进入目录“/home/cat/hl/wheeltec_robot/build/CMakeFiles/CMakeTmp”
Building C object CMakeFiles/cmTC_fad99.dir/src.c.o
/usr/bin/cc   -DCMAKE_HAVE_LIBC_PTHREAD   -o CMakeFiles/cmTC_fad99.dir/src.c.o   -c /home/cat/hl/wheeltec_robot/build/CMakeFiles/CMakeTmp/src.c
Linking C executable cmTC_fad99
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_fad99.dir/link.txt --verbose=1
/usr/bin/cc  -DCMAKE_HAVE_LIBC_PTHREAD    -rdynamic CMakeFiles/cmTC_fad99.dir/src.c.o  -o cmTC_fad99
/usr/bin/ld: CMakeFiles/cmTC_fad99.dir/src.c.o: in function `main':
src.c:(.text+0x48): undefined reference to `pthread_create'
/usr/bin/ld: src.c:(.text+0x50): undefined reference to `pthread_detach'
/usr/bin/ld: src.c:(.text+0x5c): undefined reference to `pthread_join'
collect2: error: ld returned 1 exit status
make[1]: *** [CMakeFiles/cmTC_fad99.dir/build.make:87:cmTC_fad99] 错误 1
make[1]: 离开目录“/home/cat/hl/wheeltec_robot/build/CMakeFiles/CMakeTmp”
make: *** [Makefile:121:cmTC_fad99/fast] 错误 2


Source file was:
#include <pthread.h>

void* test_func(void* data)
{
  return data;
}

int main(void)
{
  pthread_t thread;
  pthread_create(&thread, NULL, test_func, NULL);
  pthread_detach(thread);
  pthread_join(thread, NULL);
  pthread_atfork(NULL, NULL, NULL);
  pthread_exit(NULL);

  return 0;
}

Determining if the function pthread_create exists in the pthreads failed with the following output:
Change Dir: /home/cat/hl/wheeltec_robot/build/CMakeFiles/CMakeTmp

Run Build Command(s):/usr/bin/make cmTC_98d57/fast && /usr/bin/make -f CMakeFiles/cmTC_98d57.dir/build.make CMakeFiles/cmTC_98d57.dir/build
make[1]: 进入目录“/home/cat/hl/wheeltec_robot/build/CMakeFiles/CMakeTmp”
Building C object CMakeFiles/cmTC_98d57.dir/CheckFunctionExists.c.o
/usr/bin/cc   -DCHECK_FUNCTION_EXISTS=pthread_create   -o CMakeFiles/cmTC_98d57.dir/CheckFunctionExists.c.o   -c /usr/share/cmake-3.16/Modules/CheckFunctionExists.c
Linking C executable cmTC_98d57
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_98d57.dir/link.txt --verbose=1
/usr/bin/cc  -DCHECK_FUNCTION_EXISTS=pthread_create    -rdynamic CMakeFiles/cmTC_98d57.dir/CheckFunctionExists.c.o  -o cmTC_98d57  -lpthreads
/usr/bin/ld: 找不到 -lpthreads
collect2: error: ld returned 1 exit status
make[1]: *** [CMakeFiles/cmTC_98d57.dir/build.make:87:cmTC_98d57] 错误 1
make[1]: 离开目录“/home/cat/hl/wheeltec_robot/build/CMakeFiles/CMakeTmp”

这个错误表明在CMake测试阶段,编译器无法找到pthread库。要解决这个问题,你可以尝试以下步骤:

  1. 查找正确的pthread库:首先确保你的系统中已经安装了pthread库。通常情况下,pthread库是Linux系统的一部分,但在某些情况下可能需要单独安装。你可以通过包管理器来安装,例如对于Debian/Ubuntu系统,你可以运行以下命令:

     
  • sudo apt-get install libpthread-stubs0-dev
    

    对于其他Linux发行版,你需要查找相应的包名并使用适当的包管理器进行安装。

  • 设置正确的链接库:错误信息中提到找不到"-lpthreads",这表明CMake正在尝试链接pthread库时使用了错误的名称。pthread库的名称可能因系统而异,通常应该是"-lpthread"而不是"-lpthreads"。你可以在CMakeLists.txt文件中显式指定链接pthread库:

     

    cmake

  1. find_package(Threads REQUIRED)
    target_link_libraries(your_target_name Threads::Threads)
    

    将"your_target_name"替换为你的目标名称。

  2. 重新运行CMake:在进行上述更改后,重新运行CMake来重新生成Makefile,并确保编译器能够找到pthread库。

通过执行以上步骤,你应该能够解决CMake测试阶段中关于pthread的链接错误。

怎么查找SDL2和SDL2_image的安装路径

要查找SDL2和SDL2_image的安装路径,你可以执行以下步骤:

  1. 使用pkg-config:SDL2和SDL2_image通常提供了pkg-config文件,可以用来查询它们的安装路径。你可以使用以下命令来查找:

     

    bash

  • pkg-config --cflags --libs sdl2 sdl2_image
    

    这将输出SDL2和SDL2_image的编译标志和链接标志,其中包含了包含文件的路径和库的路径。

  • 使用locate命令:如果你的系统上安装了SDL2和SDL2_image,并且updatedb数据库已经更新,你可以使用locate命令来搜索相关文件的路径。例如:

     

    bash

  1. locate SDL2
    locate SDL2_image
    

    这将列出与SDL2和SDL2_image相关的文件及其路径,包括头文件、库文件等。

  2. 查看默认安装路径:通常情况下,SDL2和SDL2_image会被安装在系统的默认路径下,例如在Linux上可能是/usr/include/usr/lib。你可以直接查看这些目录来确认是否存在SDL2和SDL2_image的相关文件。

通过执行这些步骤,你应该能够找到SDL2和SDL2_image的安装路径。

cat@lubancat:~/hl/wheeltec_robot$ pkg-config --cflags --libs sdl2
-D_REENTRANT -I/usr/local/include -I/usr/local/include/SDL2 -L/usr/local/lib -Wl,-rpath,/usr/local/lib -Wl,--enable-new-dtags -lSDL2

根据你提供的输出,SDL2的安装路径如下:

  • 头文件路径:/usr/local/include/SDL2
  • 库文件路径:/usr/local/lib
  • 链接标志:-lSDL2

你可以使用这些路径来包含SDL2头文件和链接SDL2库文件到你的项目中。如果你的SDL2程序需要链接SDL2_image库,你需要执行类似的步骤来找到SDL2_image的安装路径。

怎么连接到我的ros下的功能包:问sdl2怎么连接到功能包

要将SDL2集成到ROS功能包中,你需要在你的功能包中包含SDL2的头文件和链接SDL2库。以下是一种可能的方法:

  1. 将SDL2头文件添加到功能包中:在你的功能包目录下创建一个include文件夹,并将SDL2的头文件复制到该文件夹中。你可以在SDL2的安装路径中找到这些头文件(例如/usr/local/include/SDL2)。
 
 

bash

mkdir -p my_package/include
cp -r /usr/local/include/SDL2 my_package/include
  1. 将SDL2库添加到功能包中:将SDL2的库文件复制到你的功能包中的lib文件夹中。你可以在SDL2的安装路径中找到这些库文件(例如/usr/local/lib)。
 
 

bash

mkdir -p my_package/lib
cp /usr/local/lib/libSDL2.so* my_package/lib
  1. 修改CMakeLists.txt文件:在你的功能包的CMakeLists.txt文件中,添加以下行,以指定SDL2的头文件和库文件路径,并链接SDL2库到你的可执行文件中。
 
 

cmake

cmake_minimum_required(VERSION 2.8.3)
project(my_package)

find_package(catkin REQUIRED COMPONENTS
  roscpp
)

include_directories(
  include
  ${catkin_INCLUDE_DIRS}
)

add_executable(my_node src/my_node.cpp)

target_link_libraries(my_node
  ${catkin_LIBRARIES}
  SDL2
)

确保在find_package(catkin...)之后添加include_directories指令,将SDL2头文件路径添加到编译器的包含路径中。然后,在target_link_libraries指令中添加SDL2,以链接SDL2库到你的可执行文件中。

  1. 构建功能包:在你的ROS工作空间中构建你的功能包,以便ROS可以找到SDL2的头文件和库文件,并将它们链接到你的可执行文件中。
 
 

bash

cd ~/catkin_ws
catkin_make

完成这些步骤后,你的ROS功能包应该能够正确连接和使用SDL2库了。

cat@lubancat:~/hl/wheeltec_robot$ pkg-config --cflags --libs sdl2_image Package sdl2_image was not found in the pkg-config search path. Perhaps you should add the directory containing `sdl2_image.pc' to the PKG_CONFIG_PATH environment variable No package 'sdl2_image' found

如果pkg-config找不到SDL2_image的信息,这可能意味着SDL2_image的pkg-config文件没有正确安装或配置。请确保你已经按照正确的方式安装了SDL2_image,并且pkg-config能够找到它。

在一些系统中,SDL2_image的pkg-config文件可能位于/usr/lib/pkgconfig目录下。你可以检查一下这个目录,看看是否有一个名为sdl2_image.pc的文件。如果没有找到,你可能需要手动安装SDL2_image的开发包。

如果SDL2_image的pkg-config文件已经安装但pkg-config仍然找不到,你可以尝试将包含该文件的目录添加到PKG_CONFIG_PATH环境变量中。假设SDL2_image的pkg-config文件位于/usr/local/lib/pkgconfig目录下,你可以执行以下命令:

 
 

bash

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

然后再次尝试运行pkg-config --cflags --libs sdl2_image命令来检查是否找到了SDL2_image。如果一切顺利,你应该能够看到SDL2_image的编译和链接选项。

如果以上步骤都没有解决问题,你可能需要重新安装SDL2_image或者查阅SDL2_image的文档,以确保正确配置了pkg-config。

cat@lubancat:~/hl/wheeltec_robot$ pkg-config --cflags --libs sdl2_image
Package sdl2_image was not found in the pkg-config search path.
Perhaps you should add the directory containing `sdl2_image.pc'
to the PKG_CONFIG_PATH environment variable
No package 'sdl2_image' found

如果pkg-config无法找到SDL2_image,可能是因为SDL2_image的pkg-config文件没有正确安装或配置。请按照以下步骤检查和解决问题:

  1. 确认SDL2_image已正确安装:确保已正确安装SDL2_image库。你可以使用包管理器(如apt、yum、brew等)安装SDL2_image,或者从源代码进行手动构建和安装。

  2. 查找pkg-config文件位置:在终端中执行以下命令,查找SDL2_image的pkg-config文件位置:

     

    bash

  • pkg-config --variable pc_path pkg-config
    

    输出应该是一个或多个目录路径,用冒号分隔。检查这些目录中是否存在名为sdl2_image.pc的文件。如果找不到,请继续下一步。

  • 手动设置PKG_CONFIG_PATH:将包含sdl2_image.pc文件的目录添加到PKG_CONFIG_PATH环境变量中。假设SDL2_image的pkg-config文件位于/usr/local/lib/pkgconfig目录下,你可以执行以下命令:

     

    bash

  1. export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
    

    注意,这只会在当前终端会话中生效,如果需要持久设置,请将这行命令添加到你的shell配置文件(如.bashrc.zshrc)中。

  2. 重新运行pkg-config命令:在终端中再次运行命令pkg-config --cflags --libs sdl2_image,检查是否能够找到SDL2_image。

如果以上步骤仍然无法解决问题,可能需要重新安装SDL2_image或者查阅SDL2_image的文档以了解更多关于pkg-config的配置信息。

usr/bin/mkdir -p /usr/local/lib/cmake/SDL2_image
/usr/bin/install -c -m 644 sdl2_image-config.cmake /usr/local/lib/cmake/SDL2_image
/usr/bin/install -c -m 644 sdl2_image-config-version.cmake /usr/local/lib/cmake/SDL2_image
 /usr/bin/mkdir -p '/usr/local/include/SDL2'
 /usr/bin/install -c -m 644 include/SDL_image.h '/usr/local/include/SDL2'
 /usr/bin/mkdir -p '/usr/local/lib/pkgconfig'
 /usr/bin/install -c -m 644 SDL2_image.pc '/usr/local/lib/pkgconfig'
make[2]: 离开目录“/home/cat/下载/SDL2_image-2.8.2”
make[1]: 离开目录“/home/cat/下载/SDL2_image-2.8.2”

根据你提供的输出,SDL2_image已经成功安装,并且相关的文件已经被复制到了系统目录中。然而,根据你之前的问题描述,pkg-config仍然无法找到SDL2_image。

请尝试执行以下操作:

  1. 确保在执行pkg-config --cflags --libs sdl2_image命令之前,已经执行了设置PKG_CONFIG_PATH的命令。如果没有,请执行以下命令:

     

    bash

  1. export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
    
  2. 然后再次运行pkg-config --cflags --libs sdl2_image命令,检查是否能够找到SDL2_image。

如果还是无法找到SDL2_image,请检查一下PKG_CONFIG_PATH变量是否设置正确,并确保SDL2_image的pkg-config文件位于/usr/local/lib/pkgconfig目录下。如果问题仍然存在,可能需要检查一下其他系统设置或者重新安装SDL2_image。

cat@lubancat:~/下载/SDL2_image-2.8.2$ pkg-config --cflags --libsdl2_image Unknown option --libsdl2_image

起来在你运行pkg-config --cflags --libsdl2_image时出现了错误,提示Unknown option --libsdl2_image

这个错误表明pkg-config无法识别--libsdl2_image作为选项。这很可能是因为命令中的选项格式不正确。

请尝试将命令改为:

 
 

bash

pkg-config --cflags --libs SDL2_image

注意命令中SDL2_image之前没有--前缀,因为SDL2_image是包的名称,而不是选项。执行上述命令后,应该能够正确获取SDL2_image的编译标志和链接标志。

cat@lubancat:~/下载/SDL2_image-2.8.2$ pkg-config --cflags --libs SDL2_image
-D_REENTRANT -I/usr/local/include/SDL2 -I/usr/local/include -I/usr/local/include/SDL2 -L/usr/local/lib -lSDL2_image -Wl,-rpath,/usr/local/lib -Wl,--enable-new-dtags -lSDL2

看起来现在pkg-config成功返回了SDL2_image的编译标志和链接标志。输出中包含了编译标志(--cflags)和链接标志(--libs),它们可以用于编译和链接包含SDL2_image的程序。

编译标志包括-D_REENTRANT和一些包含SDL2_image头文件的目录路径。链接标志包括了SDL2_image库的路径-L/usr/local/lib,以及SDL2_image的链接标志-lSDL2_image和SDL2的链接标志-lSDL2

现在你可以将这些标志添加到你的编译命令中,以确保正确地编译和链接SDL2_image库。如果你有任何进一步的问题或需要进一步的帮助,请随时告诉我。

我该怎么添加到ros里的cmake文件呢

要将SDL2_image的编译和链接标志添加到ROS项目的CMake文件中,你需要编辑该项目的CMakeLists.txt文件。通常,你需要使用target_link_libraries()target_include_directories()函数来添加SDL2_image的链接和包含路径。

假设你的ROS项目名为your_ros_project,以下是一个简单的示例,演示了如何在CMakeLists.txt文件中添加SDL2_image的编译和链接标志:

 
 

cmake

cmake_minimum_required(VERSION 2.8.3)
project(your_ros_project)

find_package(catkin REQUIRED COMPONENTS
  roscpp
  # 其他你所需的 ROS 包
)

# 查找 SDL2_image
find_package(SDL2_image REQUIRED)

# 添加包含路径
include_directories(
  ${catkin_INCLUDE_DIRS}
  ${SDL2_IMAGE_INCLUDE_DIRS}  # 这里是 SDL2_image 的包含路径
)

catkin_package(
  # 包信息
)

# 添加可执行文件
add_executable(your_executable src/your_source_file.cpp)

# 链接 ROS 库
target_link_libraries(your_executable
  ${catkin_LIBRARIES}
  ${SDL2_IMAGE_LIBRARIES}  # 这里是 SDL2_image 的链接标志
)

在这个示例中,find_package(SDL2_image REQUIRED)用于查找SDL2_image,include_directories()用于添加SDL2_image的包含路径,target_link_libraries()用于将SDL2_image的链接标志添加到你的可执行文件中。

确保在编辑你的CMakeLists.txt文件时,将your_ros_projectyour_executable替换为你的实际项目名称和可执行文件名称。根据你的项目结构和需要,可能还需要调整路径和其他参数。

完成编辑后,保存文件并重新构建你的ROS项目,SDL2_image的功能就应该被正确地集成到你的项目中了。

${SDL2_IMAGE_INCLUDE_DIRS}这个路径是系统自动寻找马

是的,${SDL2_IMAGE_INCLUDE_DIRS}${SDL2_IMAGE_LIBRARIES}是在使用find_package(SDL2_image REQUIRED)时自动生成的变量,它们包含了SDL2_image库的包含路径和链接标志。

当你调用find_package(SDL2_image REQUIRED)时,CMake会自动查找并设置这些变量,以便你可以在你的项目中使用它们,而无需手动指定SDL2_image的路径和链接标志。

所以在使用include_directories()target_link_libraries()时,你可以直接使用${SDL2_IMAGE_INCLUDE_DIRS}${SDL2_IMAGE_LIBRARIES}这些变量,而无需手动指定SDL2_image的路径和链接标志。这样能够使你的CMakeLists.txt文件更加简洁和可移植。

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

这个命令将会向你的PKG_CONFIG_PATH环境变量中添加/usr/local/lib/pkgconfig路径,这样当你使用pkg-config命令时,它就会在这个路径下查找.pc文件。

通常,当你安装了一些软件包并且它们包含了.pc文件时,你需要确保这些文件所在的目录被包含在PKG_CONFIG_PATH中,这样pkg-config命令才能正确地找到它们,并返回正确的编译和链接标志。

在这种情况下,你已经安装了SDL2_image,并且它的.pc文件位于/usr/local/lib/pkgconfig目录下,因此你需要将这个目录添加到PKG_CONFIG_PATH中,以便pkg-config命令能够找到SDL2_image的.pc文件,从而返回正确的编译和链接标志。

执行这个命令后,你就可以使用pkg-config命令来获取SDL2_image的编译和链接标志了。

/usr/bin/ld: /home/cat/hl/wheeltec_robot/devel/lib/libmap_server_image_loader.so: undefined reference to `SDL_FreeSurface'
/usr/bin/ld: /home/cat/hl/wheeltec_robot/devel/lib/libmap_server_image_loader.so: undefined reference to `IMG_Load'
/usr/bin/ld: /home/cat/hl/wheeltec_robot/devel/lib/libmap_server_image_loader.so: undefined reference to `SDL_GetError'
collect2: error: ld returned 1 exit status
make[2]: *** [navigation-noetic-devel/map_server/CMakeFiles/map_server.dir/build.make:125:/home/cat/hl/wheeltec_robot/devel/lib/map_server/map_server] 错误 1
make[1]: *** [CMakeFiles/Makefile2:922:navigation-noetic-devel/map_server/CMakeFiles/map_server.dir/all] 错误 2
make: *** [Makefile:141:all] 错误 2
Invoking "make -j4 -l4" failed

这个错误表明编译时发生了链接错误,具体是由于在libmap_server_image_loader.so库中找不到SDL_FreeSurfaceIMG_LoadSDL_GetError函数的定义。

这通常是由于未正确链接SDL2_image库导致的。请确保你已经正确地安装了SDL2_image库,并且在CMakeLists.txt文件中添加了正确的链接标志。

请检查以下几点:

  1. 确保你已经正确地安装了SDL2_image库。可以尝试使用pkg-config命令来确认SDL2_image库的安装路径和版本信息:

     
  • pkg-config --modversion SDL2_image
    
  • 在CMakeLists.txt文件中,确保你使用了正确的链接标志来链接SDL2_image库。你可以在target_link_libraries()函数中添加${SDL2_IMAGE_LIBRARIES}变量,如下所示:

     

    cmake

  • target_link_libraries(your_executable
      ${catkin_LIBRARIES}
      ${SDL2_IMAGE_LIBRARIES}
    )
    
  • 确保你在CMakeLists.txt文件中正确地设置了SDL2_image的包含路径。你可以在include_directories()函数中添加${SDL2_IMAGE_INCLUDE_DIRS}变量,如下所示:

     

    cmake

  1. include_directories(
      ${catkin_INCLUDE_DIRS}
      ${SDL2_IMAGE_INCLUDE_DIRS}
    )
    

完成以上步骤后,重新构建你的项目,看看是否能够解决链接错误。如果问题仍然存在,请确保你的SDL2_image库完整且可用,并检查你的CMakeLists.txt文件中是否有其他可能导致链接错误的配置错误。

怎么查看链接标志

你可以使用pkg-config命令来查看SDL2_image库的链接标志。

在终端中运行以下命令:

 
 

shell

pkg-config --libs SDL2_image

这将返回SDL2_image库的链接标志,例如-lSDL2_image和其他可能需要的系统库。

另外,你还可以使用pkg-config命令来查看SDL2_image库的包含路径,运行以下命令:

 
 

shell

pkg-config --cflags SDL2_image

这将返回SDL2_image库的包含路径,例如-I/usr/include/SDL2

通过查看链接标志和包含路径,你就能够正确地配置你的CMakeLists.txt文件,以确保能够正确链接SDL2_image库。

SDL 1.2和SDL 2 可以在 Ubuntu 上共存。它们是不同的版本,可以同时安装并在同一台机器上使用。

要安装SDL 1.2,请执行以下命令:

 
 
sudo apt-get install libsdl1.2-dev

要安装SDL 2,请执行以下命令:

 
 
sudo apt-get install libsdl2-dev

这样就可以在同一台机器上同时使用SDL 1.2和SDL 2,并根据需要选择适当的版本进行开发。请注意,在编译时需要使用正确的头文件和库文件路径来链接所需的SDL版本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1674793.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

抖音小店的个人店和个体店有什么区别?限制不同,新手必须了解!

大家好&#xff0c;我是电商月月 我们做抖音小店入驻时会有三个选择&#xff0c;分别为&#xff1a;企业入驻&#xff0c;个体工商户入驻&#xff0c;个人身份证入驻 其中企业店是给厂家&#xff0c;公司建立的选项 那个人店和个体店呢&#xff0c;普通人做店要选择哪种呢&a…

[XYCTF新生赛]-PWN:baby_gift解析(函数调用前需清空eax)

查看保护 查看ida 这里有一处栈溢出&#xff0c;并且从汇编上看&#xff0c;程序将rbp0x20处设置为了rdi&#xff0c;让我们可以控制rdi的值。而程序没有可利用的pop。 完整exp&#xff1a; from pwn import* pprocess(./babygift) premote(gz.imxbt.cn,20833) printf_plt0x4…

优雅谈论大模型7:重新审视神经网络

这个专栏围绕着大模型的基本知识点深入浅出&#xff0c;章节之间的联系较为紧密。若在某个环节出现卡点&#xff0c;可以回到如何优雅的谈论大模型重新阅读。而斯坦福2024人工智能报告解读则为通识性读物。若对于如果构建生成级别的AI架构则可以关注AI架构设计专栏。技术宅麻烦…

Hive JSON数据处理

Hive JSON数据处理 JSON&#xff08;JavaScript Object Notation&#xff09;文件格式是一种轻量级的数据交换格式&#xff0c;用于存储和传输结构化的数据。它基于JavaScript的语法&#xff0c;但是可以被多种编程语言所支持和解析&#xff0c;因此被广泛应用于各种场景。 J…

数据中心网络随想-电路交换

数据中心网络扩容并不容易&#xff0c;涉及设备上架&#xff0c;切换等又硬又大的动作&#xff0c;期间对所有应用都会产生影响&#xff0c;所以理论上 “加钱加硬件” 这种看起来很简单的事实际上真不如 “写一个随时部署升级的端到端拥塞控制算法” 更容易实施。 傍晚绕小区…

OpenAI春季发布会-免费多模态GPT4O-简介

前言 2024.5.14&#xff0c;OpenAI宣布即将发布一款性能更为强大的大模型GPT4o&#xff0c;虽然没有爆出些超级酷炫无敌吊炸天的新玩意&#xff0c;但是这次的多模态模型&#xff0c;大家可以免费用了~~&#xff08;但是&#xff09; 虽然是免费使用&#xff0c;但官方发布会上…

sentinel搭建及使用

1.添加依赖&#xff08;版本可依赖于父pom&#xff09; SentinalResource注解&#xff1a; 添加依赖&#xff1a; blockhandler: fallback:

Python 全栈体系【四阶】(四十二)

第五章 深度学习 九、图像分割 3. 常用模型 3.2 U-Net&#xff08;2015&#xff09; 生物医学分割是图像分割重要的应用领域。U-Net是2015年发表的用于生物医学图像分割的模型&#xff0c;该模型简单、高效、容易理解、容易定制&#xff0c;能在相对较小的数据集上实现学习…

分析 vs2019 c++ 中的 decltype 与 declval

&#xff08;1&#xff09; decltype 可以让推断其参数的类型。按住 ctrl 点击 decltype &#xff0c;会发现无法查阅 其定义 &#xff1a; &#xff08;2&#xff09; 但 STL 库里咱们可以查阅函数 declval 的 定义&#xff0c;很短&#xff0c;摘抄如下&#xff1a; templat…

linux服务器测试NVIDIA显卡性能

1.测试环境 一台Linux服务器电脑&#xff08;可联网&#xff09; NVIDIA显卡 注意&#xff1a;仅仅测试浮点运算性能和内存带宽 2.安装测试软件 2.1检查驱动版本 输入指令nvidia-smi&#xff0c;主要是判断显卡驱动有没有安装。如果指令存在可显示如下&#xff1a; luhos…

MySql初学日记

MySql基础 概述 结构化查询语言(Structure Query Language)简称SQL。 是一种特殊的&#xff0c;标准的数据库编程语言&#xff0c;&#xff0c;一般的数据库管理系统都支持&#xff0c;用于对数据库进行增删改查等操作&#xff0c;实现数据持久化到本地。 使用完整的管理系…

[Fork.dev] 增加用idea打开

用Fork做git管理工具时, 只有vscode 和sublime 等. 没有idea的. 今天研究了下如何操作.记录一下 点击 Action 文本框进行编辑 Path填写idea的执行位置. Parameters: 填写 ${repo:path} 代表用idea打开的文件夹路径为当前. 最终显示效果

我是学生,申请加入!KubeBlocks 首次参与开源之夏,前沿技术、丰厚奖金、大牛导师等你来!

滴滴&#xff01;KubeBlocks 参加今年的开源之夏了&#xff01;现诚邀您一起探索优质开源社区&#xff0c;通过实战提升研发能力&#xff0c;快来报名项目&#xff0c;赢取奖金和证书吧&#xff01; 开源之夏是什么&#xff1f; 开源之夏是中国科学院软件研究所发起的“开源软…

汇智知了堂布局鸿蒙生态:推出南向设备开发课程,助力物联网人才培养

随着重庆市在鸿蒙原生应用开发上的积极推进&#xff0c;包括上游新闻、新重庆、华龙网在内的多家传媒巨头携手华为开发者联盟&#xff0c;引领本地传媒业深入探索鸿蒙生态。在此背景下&#xff0c;汇智知了堂积极响应政府与行业的号召&#xff0c;宣布即日起正式开发鸿蒙南向设…

Flutter 玩转动画 + 自定义View 实现积分或金币领取流程动画

一、效果图 二、主要涉及的知识点 AnimationController、Animation、FractionalTranslation 动画Api的运用CustomPainter 自定义View以及每个时机的把握 主要是写篇博客来记录一下这个功能的实现&#xff0c;具体代码就看源代码了&#xff0c;有疑问可以私信沟通 源代码下载…

微服务熔断降级

什么是熔断降级 微服务中难免存在服务之间的远程调用&#xff0c;比如&#xff1a;内容管理服务远程调用媒资服务的上传文件接口&#xff0c;当微服务运行不正常会导致无法正常调用微服务&#xff0c;此时会出现异常&#xff0c;如果这种异常不去处理可能导致雪崩效应。 微服…

无货源做抖音小店怎么找货源?怎么判断厂家是不是源头厂家?

大家好&#xff0c;我是喷火龙 抖音小店无货源玩法最重要的就是找货源&#xff0c;找有优势、稳定、靠谱的供应链。 这篇文章就给大家讲一讲怎么去找货源&#xff0c;怎么找到真正的源头厂家。 一、怎么找货源? 无货源商家找货源在1688、多多上面可能会多点&#xff0c;因…

易图讯科技数字武装三维电子沙盘

深圳易图讯科技(www.3dgis.top)集成了高清卫星影像、地形数据、实景三维模型、基干民兵、普通民兵、重要目标、兵要地志、企业潜力 、行业潜力 、社会组织潜力 、特种装备器材潜力、敌情数据、现场环境数据、物联感知信息&#xff0c;构建一体化的数字孪生空间&#xff0c;实现…

被动防护不如主动出击

自网络的诞生以来&#xff0c;攻击威胁事件不断涌现&#xff0c;网络攻防对抗已然成为信息时代背景下的一场无硝烟的战争。然而&#xff0c;传统的网络防御技术&#xff0c;如防火墙和入侵检测技术&#xff0c;往往局限于一种被动的敌暗我明的防御模式&#xff0c;面对攻击者无…

CAD看图软件有哪些?这几款新手也能用

CAD看图软件有哪些&#xff1f;在工程设计、建筑制图、机械制造等领域&#xff0c;CAD&#xff08;计算机辅助设计&#xff09;看图软件是不可或缺的工具。然而&#xff0c;对于新手来说&#xff0c;选择一款合适的CAD看图软件可能会有些困难。那么&#xff0c;今天小编就来介绍…