
Beman Dawes wrote:
Does anyone know what's going on here? Am I supposed to be passing some additional options to g++ when building or using shared libraries?
Well, you may need to set LD_LIBRARY_PATH env. variable or equivalent, or link with -rpath. However, if callee.dll could not be found in runtime, I'd expect a message from loader instead of a crash. For example, on a Linux system: bash-3.00$ g++ -o dll_test caller.cpp -L. -lcallee bash-3.00$ dll_test dll_test: error while loading shared libraries: libcallee.so: cannot open shared object file: No such file or directory bash-3.00$ export LD_LIBRARY_PATH=. bash-3.00$ dll_test all's well that ends well bash-3.00$ export LD_LIBRARY_PATH= bash-3.00$ g++ -Wl,-rpath . -o dll_test caller.cpp -L. -lcallee bash-3.00$ dll_test all's well that ends well bash-3.00$ Anyway, I tried your example on HP-UX/ia64 with gcc 4.2.1 and it worked, both static and dll. Thanks, Boris ----- Original Message ----- From: "Beman Dawes" <bdawes@acm.org> To: "Boost mailing list" <boost@lists.boost.org> Sent: Friday, September 14, 2007 4:15 PM Subject: [boost] [gcc] bug causing filesystem crashes
Below is a little program, made up of two files. It's a reduction of code causing filesystem crashes when compiled with g++ on some, but not all, platforms that gcc supports. It works fine with other compilers.
The static version works fine, even with g++, and outputs "all's well that ends well".
dll_test stackdumps at the line marked with the comment.
Does anyone know what's going on here? Am I supposed to be passing some additional options to g++ when building or using shared libraries?
Thanks,
--Beman
callee.cpp ==========
#include <string>
void f( std::string & s ) { s = "all's well that ends well"; // dll_test crash! }
caller.cpp ==========
#include <string> #include <iostream>
void f( std::string & s );
int main() { std::string s; f(s); std::cout << s << std::endl; return 0; }
Compile and test (cygwin) =========================
g++ -o static_test caller.cpp callee.cpp static_test
g++ -c callee.cpp g++ -shared -o callee.dll callee.o g++ -o dll_test caller.cpp -L./ -lcallee dll_test _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost