Re: [ros-users] rosmake doesn't wait for rosbuild_gensrv to …

Top Page
Attachments:
Message as email
+ (text/plain)
Delete this message
Reply to this message
Author: User discussions
Date:  
To: User discussions
Subject: Re: [ros-users] rosmake doesn't wait for rosbuild_gensrv to complete
Darn, that was an obvious mistake. I should have seen that.

Well, that seems to have fixed the dependency problem, but now it's
introducing a new error in the way the code is generated:

[100%] Building CXX object CMakeFiles/mytraj.dir/MyTraj.o
Linking CXX shared library ../lib/libmytraj.so
/usr/bin/ld:
/homes/mvandewe/pr/branches/mike/owd/lib/libopenwam.a(Trajectory.o):
relocation R_X86_64_32 against `.bss' can not be used when making a
shared object; recompile with -fPIC
/homes/mvandewe/pr/branches/mike/owd/lib/libopenwam.a: could not read
symbols: Bad value
collect2: ld returned 1 exit status
make[3]: *** [../lib/libmytraj.so] Error 1

Is the rosbuild_add_library() setting different compile flags than
cmake's own add_library()? I wasn't getting this error before, and my
compiled library loaded just fine, too.

Thanks,

Mike

On 4/18/2011 12:16 PM, Brian Gerkey wrote:
> On Mon, Apr 18, 2011 at 8:50 AM, Mike Vande Weghe <> wrote:
>> I've noticed that for a package that defines a single ROS service and
>> that builds a single shared library, the compilation fails the first
>> time through because the header file for the service has not yet been
>> completed. When I do a second rosmake the compilation succeeds. Do
>> service generation and code compilation happen in parallel, and if so is
>> there a way to order them?
>>
>> My CMakeLists.txt looks like this:
>> -------------------------------------------------------
>> cmake_minimum_required(VERSION 2.4.6)
>> include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake)
>>
>> rosbuild_init()
>> rosbuild_gensrv()
>>
>> add_library(mytraj SHARED MyTraj.cpp)
>> -------------------------------------------------------
>
> You're calling CMake's `add_library()` directly, which doesn't offer
> rosbuild the opportunity to set up dependencies. It also doesn't
> bring in ROS-related build flags, e.g., from packages that your
> package depends on.
>
> I recommend calling `rosbuild_add_library()` instead:
> rosbuild_add_library(mytraj MyTraj.cpp)
> You don't need to supply the SHARED flag. Building of static and
> shared libs for rosbuild is controlled via the `ROS_BUILD_STATIC_LIBS`
> and `ROS_BUILD_SHARED_LIBS` variables (but note that static libs are
> not well-exercised).
>
>     brian.
> _______________________________________________
> ros-users mailing list
> 
> https://code.ros.org/mailman/listinfo/ros-users

>