Ok, got it...cheers. On 13 August 2010 08:41, Josh Faust wrote: > test_as_needed_so.cpp: > > #include > #include > > class Foo > { > public: > Foo() > { > printf("foo init\n"); > } > > ~Foo() > { > printf("foo deinit\n"); > } > }; > > Foo foo; > > test_as_needed.cpp > #include > > int main(int argc, char** argv) > { > printf("main\n"); > } > > > > jfaust@bvu:~/scratch$ g++ test_as_needed_so.cpp -shared -fPIC -o > libtest_as_needed_so.so > jfaust@bvu:~/scratch$ g++ test_as_needed.cpp -o test_as_needed > -ltest_as_needed_so > jfaust@bvu:~/scratch$ ./test_as_needed > foo init > main > foo deinit > > jfaust@bvu:~/scratch$ g++ test_as_needed.cpp -Wl,--as-needed -o > test_as_needed -ltest_as_needed_so > jfaust@bvu:~/scratch$ ./test_as_needed > main > > > If you use the variable it has to link it in... it's when there's some > global initialization that causes side effects even if you're not explicitly > referencing any symbols. Not necessarily a problem, but something to look > out for. > > Josh > > On Thu, Aug 12, 2010 at 4:13 PM, Daniel Stonier wrote: > >> >> >> On 10 August 2010 02:32, Josh Faust wrote: >> >>> >>>> Happy to hear that it works in general (would be pretty bad if it >>>> didn't...). I'm more concerned about whether we're currently >>>> specifying everything completely, or unknowingly exploiting >>>> overlinkage. >>>> >>>> I guess the only way to find out is to build and test everything with >>>> that option included. >>>> >>>> >>> I just did two quick tests: >>> 1) .so that overrides a global symbol (strstr in this case) >>> 2) .so with a global object that has a constructor/destructor >>> >>> #1 worked, #2 failed (the .so was removed). >>> >>> If #1 failed I'd say we can't default to it. Not sure how important #2 >>> is, but it's something that could definitely cause problems that would be >>> difficult to track down. >>> >>> Josh >>> >> >> Josh, how did you produce result 2)? I just tested it here to be aware of >> when it might break and couldn't reproduce the failure. It correctly >> excludes/includes the library when I comment/uncomment the relevant usage of >> the variable. Snippets below: >> >> LIBRARY HPP: >> >> namespace ecl { >> >> class A { >> public: >> A() : i(3) {} >> ~A() {} >> int i; >> }; >> extern const A a; >> >> } >> >> LIBRARY CPP: >> >> namespace ecl { >> >> const A a; >> >> } >> >> MAIN CPP >> >> int main() { >> std::cout << "i: " << ecl::a.i << std::endl; >> return 0; >> } >> >> >> >> >> >> >> -- >> Phone : +82-10-5400-3296 (010-5400-3296) >> Home: http://snorriheim.dnsdojo.com/ >> Yujin Robot: http://www.yujinrobot.com/ >> Embedded Control Libraries: >> http://snorriheim.dnsdojo.com/redmine/wiki/ecl >> >> _______________________________________________ >> 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 > > -- Phone : +82-10-5400-3296 (010-5400-3296) Home: http://snorriheim.dnsdojo.com/ Yujin Robot: http://www.yujinrobot.com/ Embedded Control Libraries: http://snorriheim.dnsdojo.com/redmine/wiki/ecl