I looked into this again, after the discussion today. 

Going off the tip yesterday about rosconsole successfully compiling with the g++ legacy compiler rather than llvm-g++ current compiler, I decided to try compiling nodelet with /usr/bin/g++-4.2 (now the "legacy") compiler. 

All of the boost linking errors went away, and building was perfect. This was still with "TIXML_USE_STL" defined. Remove the define, and things break again. 

I'm having trouble even trying it with clang++ (experimental compiler), because clang++ doesn't respect LIBRARY_PATH, so it doesn't find the macports libraries (e.g. tinyxml) at all.

--Nick

On Fri, Sep 2, 2011 at 10:37 AM, Kevin Walchko <kevin.walchko@gmail.com> wrote:
I don't like installing source code I can't easily remove. That is why I put up with macports.




On Sep 2, 2011, at 12:49 PM, Brian Gerkey wrote:

> hi Kevin,
>
> On Fri, Sep 2, 2011 at 8:06 AM, Kevin Walchko <kevin.walchko@gmail.com> wrote:
>> I am having problems compiling nodelet.
>> ROS electric, OSX Lion 10.7 using macports and default compiler
>> I had to define STL use in loader.cpp, otherwise the macports of tinyXML
>> didn't make certain class members available:
>> #define TIXML_USE_STL
>> is there a way to define this in CMakeLists.txt?
>
> Did the tinyxml source rosdep not work for you?  `rosdep install
> nodelet` should build and install an appropriately configured version
> of tinyxml from https://kforge.ros.org/rosrelease/sourcedeps/tinyxml.
> I wrote that because I was having the same trouble you are (and more,
> as I recall) with using the macports version of tinyxml.
>
>> I am getting this error, but not sure why. I am assuming I have to add
>> something to CMakeLists.txt to make the headers from include/nodelet
>> available, but adding include(${PROJECT_SOURCE_DIR}/include/nodelet) didn't
>> help.
>>
>> [ 66%] Built target rosbuild_precompile
>> Linking CXX shared library ../lib/libnodeletlib.dylib
>> Undefined symbols for architecture x86_64:
>
> Not sure what's going on there.  I was just able to build nodelet on
> my 10.6 machine (and I'm about to add it to the electric-devel builds
> so that it keeps working).
>
>       brian.
>
>>   "nodelet::UninitializedException::~UninitializedException()", referenced
>> from:
>>       nodelet::Nodelet::getMTPrivateNodeHandle() constin nodelet_class.o
>>       nodelet::Nodelet::getMTNodeHandle() constin nodelet_class.o
>>       nodelet::Nodelet::getPrivateNodeHandle() constin nodelet_class.o
>>       nodelet::Nodelet::getNodeHandle() constin nodelet_class.o
>>       nodelet::Nodelet::getMTCallbackQueue() constin nodelet_class.o
>>       nodelet::Nodelet::getSTCallbackQueue() constin nodelet_class.o
>>       vtable for nodelet::UninitializedExceptionin nodelet_class.o
>>       ...
>>   "boost::shared_ptr<ros::NodeHandle>::operator*() const", referenced from:
>>       nodelet::Nodelet::getMTPrivateNodeHandle() constin nodelet_class.o
>>       nodelet::Nodelet::getMTNodeHandle() constin nodelet_class.o
>>       nodelet::Nodelet::getPrivateNodeHandle() constin nodelet_class.o
>>       nodelet::Nodelet::getNodeHandle() constin nodelet_class.o
>>   "boost::shared_ptr<nodelet::detail::CallbackQueue>::operator*() const",
>> referenced from:
>>       nodelet::Nodelet::getMTCallbackQueue() constin nodelet_class.o
>>       nodelet::Nodelet::getSTCallbackQueue() constin nodelet_class.o
>>   "boost::shared_ptr<bond::Bond>::reset()", referenced from:
>>       nodelet::Nodelet::~Nodelet()in nodelet_class.o
>>       nodelet::Nodelet::~Nodelet()in nodelet_class.o
>>   "boost::shared_ptr<bond::Bond>::~shared_ptr()", referenced from:
>>       nodelet::Nodelet::~Nodelet()in nodelet_class.o
>>       nodelet::Nodelet::~Nodelet()in nodelet_class.o
>>   "boost::shared_ptr<ros::NodeHandle>::~shared_ptr()", referenced from:
>>       nodelet::Nodelet::~Nodelet()in nodelet_class.o
>>       nodelet::Nodelet::~Nodelet()in nodelet_class.o
>>       nodelet::Nodelet::Nodelet()in nodelet_class.o
>>   "boost::shared_ptr<nodelet::detail::CallbackQueue>::~shared_ptr()",
>> referenced from:
>>       nodelet::Nodelet::~Nodelet()in nodelet_class.o
>>       nodelet::Nodelet::~Nodelet()in nodelet_class.o
>>       nodelet::Nodelet::Nodelet()in nodelet_class.o
>>
>> nodelet::detail::CallbackQueue::addCallback(boost::shared_ptr<ros::CallbackInterface>
>> const&, unsigned long long)in callback_queue.o
>>   "boost::shared_ptr<nodelet::detail::CallbackQueue>::shared_ptr()",
>> referenced from:
>>       nodelet::Nodelet::Nodelet()in nodelet_class.o
>>       nodelet::detail::CallbackQueueManager::QueueInfo::QueueInfo()in
>> callback_queue_manager.o
>>   "boost::shared_ptr<ros::NodeHandle>::shared_ptr()", referenced from:
>>       nodelet::Nodelet::Nodelet()in nodelet_class.o
>>   "boost::shared_ptr<bond::Bond>::shared_ptr()", referenced from:
>>       nodelet::Nodelet::Nodelet()in nodelet_class.o
>>
>> "nodelet::MultipleInitializationException::~MultipleInitializationException()",
>> referenced from:
>>       nodelet::Nodelet::init(std::basic_string<char, std::char_traits<char>,
>> std::allocator<char> > const&, std::map<std::basic_string<char,
>> std::char_traits<char>, std::allocator<char> >, std::basic_string<char,
>> std::char_traits<char>, std::allocator<char> >,
>> std::less<std::basic_string<char, std::char_traits<char>,
>> std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char,
>> std::char_traits<char>, std::allocator<char> > const,
>> std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >
>> const&, std::vector<std::basic_string<char, std::char_traits<char>,
>> std::allocator<char> >, std::allocator<std::basic_string<char,
>> std::char_traits<char>, std::allocator<char> > > > const&,
>> nodelet::detail::CallbackQueueManager*, boost::shared_ptr<bond::Bond>)in
>> nodelet_class.o
>>       vtable for nodelet::MultipleInitializationExceptionin nodelet_class.o
>>   "boost::shared_ptr<bond::Bond>::operator=(boost::shared_ptr<bond::Bond>
>> const&)", referenced from:
>>       nodelet::Nodelet::init(std::basic_string<char, std::char_traits<char>,
>> std::allocator<char> > const&, std::map<std::basic_string<char,
>> std::char_traits<char>, std::allocator<char> >, std::basic_string<char,
>> std::char_traits<char>, std::allocator<char> >,
>> std::less<std::basic_string<char, std::char_traits<char>,
>> std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char,
>> std::char_traits<char>, std::allocator<char> > const,
>> std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >
>> const&, std::vector<std::basic_string<char, std::char_traits<char>,
>> std::allocator<char> >, std::allocator<std::basic_string<char,
>> std::char_traits<char>, std::allocator<char> > > > const&,
>> nodelet::detail::CallbackQueueManager*, boost::shared_ptr<bond::Bond>)in
>> nodelet_class.o
>>   "void
>> boost::shared_ptr<nodelet::detail::CallbackQueue>::reset<nodelet::detail::CallbackQueue>(nodelet::detail::CallbackQueue*)",
>> referenced from:
>>       nodelet::Nodelet::init(std::basic_string<char, std::char_traits<char>,
>> std::allocator<char> > const&, std::map<std::basic_string<char,
>> std::char_traits<char>, std::allocator<char> >, std::basic_string<char,
>> std::char_traits<char>, std::allocator<char> >,
>> std::less<std::basic_string<char, std::char_traits<char>,
>> std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char,
>> std::char_traits<char>, std::allocator<char> > const,
>> std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >
>> const&, std::vector<std::basic_string<char, std::char_traits<char>,
>> std::allocator<char> >, std::allocator<std::basic_string<char,
>> std::char_traits<char>, std::allocator<char> > > > const&,
>> nodelet::detail::CallbackQueueManager*, boost::shared_ptr<bond::Bond>)in
>> nodelet_class.o
>>   "void
>> boost::shared_ptr<ros::NodeHandle>::reset<ros::NodeHandle>(ros::NodeHandle*)",
>> referenced from:
>>       nodelet::Nodelet::init(std::basic_string<char, std::char_traits<char>,
>> std::allocator<char> > const&, std::map<std::basic_string<char,
>> std::char_traits<char>, std::allocator<char> >, std::basic_string<char,
>> std::char_traits<char>, std::allocator<char> >,
>> std::less<std::basic_string<char, std::char_traits<char>,
>> std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char,
>> std::char_traits<char>, std::allocator<char> > const,
>> std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >
>> const&, std::vector<std::basic_string<char, std::char_traits<char>,
>> std::allocator<char> >, std::allocator<std::basic_string<char,
>> std::char_traits<char>, std::allocator<char> > > > const&,
>> nodelet::detail::CallbackQueueManager*, boost::shared_ptr<bond::Bond>)in
>> nodelet_class.o
>>   "boost::shared_ptr<nodelet::detail::CallbackQueue>::get() const",
>> referenced from:
>>       nodelet::Nodelet::init(std::basic_string<char, std::char_traits<char>,
>> std::allocator<char> > const&, std::map<std::basic_string<char,
>> std::char_traits<char>, std::allocator<char> >, std::basic_string<char,
>> std::char_traits<char>, std::allocator<char> >,
>> std::less<std::basic_string<char, std::char_traits<char>,
>> std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char,
>> std::char_traits<char>, std::allocator<char> > const,
>> std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >
>> const&, std::vector<std::basic_string<char, std::char_traits<char>,
>> std::allocator<char> >, std::allocator<std::basic_string<char,
>> std::char_traits<char>, std::allocator<char> > > > const&,
>> nodelet::detail::CallbackQueueManager*, boost::shared_ptr<bond::Bond>)in
>> nodelet_class.o
>>   "boost::shared_ptr<ros::NodeHandle>::operator->() const", referenced from:
>>       nodelet::Nodelet::init(std::basic_string<char, std::char_traits<char>,
>> std::allocator<char> > const&, std::map<std::basic_string<char,
>> std::char_traits<char>, std::allocator<char> >, std::basic_string<char,
>> std::char_traits<char>, std::allocator<char> >,
>> std::less<std::basic_string<char, std::char_traits<char>,
>> std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char,
>> std::char_traits<char>, std::allocator<char> > const,
>> std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >
>> const&, std::vector<std::basic_string<char, std::char_traits<char>,
>> std::allocator<char> >, std::allocator<std::basic_string<char,
>> std::char_traits<char>, std::allocator<char> > > > const&,
>> nodelet::detail::CallbackQueueManager*, boost::shared_ptr<bond::Bond>)in
>> nodelet_class.o
>>
>> "nodelet::MultipleInitializationException::~MultipleInitializationException()",
>> referenced from:
>>       vtable for nodelet::MultipleInitializationExceptionin nodelet_class.o
>>   "nodelet::UninitializedException::~UninitializedException()", referenced
>> from:
>>       vtable for nodelet::UninitializedExceptionin nodelet_class.o
>>   "ros::WallDuration::~WallDuration()", referenced from:
>>       nodelet::detail::CallbackQueue::callOne()    in callback_queue.o
>>
>> "boost::enable_shared_from_this<nodelet::detail::CallbackQueue>::shared_from_this()",
>> referenced from:
>>
>> nodelet::detail::CallbackQueue::addCallback(boost::shared_ptr<ros::CallbackInterface>
>> const&, unsigned long long)in callback_queue.o
>>
>> "boost::enable_shared_from_this<nodelet::detail::CallbackQueue>::~enable_shared_from_this()",
>> referenced from:
>>       nodelet::detail::CallbackQueue::~CallbackQueue()in callback_queue.o
>>       nodelet::detail::CallbackQueue::~CallbackQueue()in callback_queue.o
>>
>> nodelet::detail::CallbackQueue::CallbackQueue(nodelet::detail::CallbackQueueManager*)in
>> callback_queue.o
>>   "ros::CallbackQueueInterface::CallbackQueueInterface()", referenced from:
>>
>> nodelet::detail::CallbackQueue::CallbackQueue(nodelet::detail::CallbackQueueManager*)in
>> callback_queue.o
>>
>> "boost::enable_shared_from_this<nodelet::detail::CallbackQueue>::enable_shared_from_this()",
>> referenced from:
>>
>> nodelet::detail::CallbackQueue::CallbackQueue(nodelet::detail::CallbackQueueManager*)in
>> callback_queue.o
>>
>> "boost::shared_ptr<boost::mutex>::shared_ptr<boost::mutex>(boost::mutex*)",
>> referenced from:
>>       nodelet::detail::CallbackQueueManager::ThreadInfo::ThreadInfo()in
>> callback_queue_manager.o
>>
>> "boost::shared_ptr<boost::condition_variable>::shared_ptr<boost::condition_variable>(boost::condition_variable*)",
>> referenced from:
>>       nodelet::detail::CallbackQueueManager::ThreadInfo::ThreadInfo()in
>> callback_queue_manager.o
>> ld: symbol(s) not found for architecture x86_64
>> collect2: ld returned 1 exit status
>> make[3]: *** [../lib/libnodeletlib.dylib] Error 1
>> make[2]: *** [CMakeFiles/nodeletlib.dir/all] Error 2
>> make[1]: *** [all] Error 2
>> make: *** [all] Error 2
>> [kevin@TARDIS nodelet]$
>>
>> _______________________________________________
>> ros-users mailing list
>> ros-users@code.ros.org
>> https://code.ros.org/mailman/listinfo/ros-users
>>
>>
> _______________________________________________
> ros-users mailing list
> ros-users@code.ros.org
> https://code.ros.org/mailman/listinfo/ros-users

_______________________________________________
ros-users mailing list
ros-users@code.ros.org
https://code.ros.org/mailman/listinfo/ros-users