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 > ros-users@code.ros.org > https://code.ros.org/mailman/listinfo/ros-users >