Skip to content

zstd_vendor breaks CMake when cross-compiling for QNX #1172

Open
@jpsamper2009

Description

Description

  • When cross-compiling rosbag2 for x86_64 QNX, zstd_vendor will download and compile libzstd.so, then copy it to the install directory. libzstd.so is a dependency of the CMake executable on the host, so on the next cmake invocation, the runtime linker finds the QNX version of libzstd.so, causing cmake to fail
  • The root cause is that colcon invokes LD_LIBRARY_PATH=/path/to/workspace/install/lib:$LD_LIBRARY_PATH cmake ... in order to make other packages' resources available to the current package; however, this has the side effect of also changing the LD_LIBRARY_PATH for the host's CMake.

Expected Behavior

  • Compiling libzstd.so for x86_64 QNX does not interfere with the libzstd.so needed by the cmake on the host.

Actual Behavior

  1. zstd is not found for x86_64 QNX
  2. zstd_vendor downloads, compiles, and installs libzstd.so in the workspace's install directory
  3. cmake is invoked for another package, finding the new libzstd.so
  4. Since libzstd.so is compiled for QNX (and not Linux), cmake fails to run

To Reproduce

  1. Follow the instructions in https://ros2-qnx-documentation.readthedocs.io/en/galactic/build_from_source.html to compile ROS2 for QNX, except:
    1. In "Building Steps - 5", use CPU=x86_64
    2. Modify build-ros2.sh to invoke colcon twice, the first time with --packages-up-to zstd_vendor, the second time with --packages-select gmock_vendor: i.e.
    build () {
        ...
       colcon build ...
            ...
            --packages-up-to zstd_vendor \
            --cmake-args \
                 ....
       colcon build ...
            ...
            --packages-up-to gmock_vendor \
            --cmake-args \
                 ....
        ...
    }
    
  2. The second colcon command fails with something like:
    /usr/bin/cmake: error while loading shared libraries: libregex.so.1: cannot open shared object file: No such file or directory
    

(Side note: The instructions for compiling ROS2 for QNX are broken in other ways, but it was easier to point to those instructions than to explain here all the other changes that are not related to this bug report)

System

Additional context

  • I imagine the fix is to follow a similar scheme to yaml_cpp_vendor where the libraries are installed elsewhere, and the _vendor package makes them available

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions