|
Boost Users : |
From: Daniel Lord (daniel_at_[hidden])
Date: 2008-03-01 17:36:31
UPDATE:Just came across this in the Boost documentation for filesystem which
might be an explanation:
"All exceptions thrown by the Filesystem Library are implemented by calling
boost::throw_exception()<file:///Users/daniello/Documents/Development/Lib/Boost/boost_1_34_1/libs/utility/throw_exception.html>.
Thus exact behavior may differ depending on BOOST_NO_EXCEPTIONS at the time
the filesystem source files are compiled."
Daniel
--- Some people building C++/Obj-C code on OS X with Xcode and have a problem think: "I know, I'll use the Boost Libraries". Now they have two problems--three if they used Boost for regular expressions. ;-) On 3/1/08, Daniel Lord <daniel_at_[hidden]> wrote: > > Lothar, > My terse reply was not meant to be disrespectful ( in case you took it > that way--text conversations can be misunderstood). I only posted the output > in case you already figured it out thus avoiding spamming the list with a > huge post given there don't seem many OS X developers on it so very few give > a fig about this issue. But our numbers are growing and these painful > learning experiences are becoming more common. The regime below is a > quick-and-dirty sub-optimal brute force way of achieving a universal fat32 > C++ build on OS X with Xcode 3. Once working, you can refine from there. I > am no expert nor journeyman with Xcode though I hope to be one day. This > works for me so I can focus on my application work. HTH. > > ARCHITECTURE ISSUES > ---- > Both my systems run Leopard 10.5.2 and are i386 ( a Core Duo Macbook Pro > and a first-gen Quad core 8-way SMP Mac Pro). > > My Boost build seem to produce fat32 binaries "out of the box" with no > special configuration. as the out of 'file' on the boost_filesystem libs > shows: > > ./static/debug/mt/libboost_filesystem-mt-d-1_34_1.a: current ar archive > ./static/debug/mt/libboost_filesystem-mt-d.a: current ar archive > ./static/debug/st/libboost_filesystem-d-1_34_1.a: current ar archive > ./static/debug/st/libboost_filesystem-d.a: current ar archive > > ./static/debug/st/libboost_filesystem-gcc40-d-1_34.a: Mach-O universal > binary with 2 architectures > ./static/debug/st/libboost_filesystem-gcc40-d-1_34.a (for architecture > ppc): current ar archive > ./static/debug/st/libboost_filesystem-gcc40-d-1_34.a (for architecture > i386): current ar archive > > ./static/release/mt/libboost_filesystem-gcc40-mt-1_34.a: Mach-O universal > binary with 2 architectures > ./static/release/mt/libboost_filesystem-gcc40-mt-1_34.a (for architecture > ppc): current ar archive > ./static/release/mt/libboost_filesystem-gcc40-mt-1_34.a (for architecture > i386): current ar archive > > > IMPORTANT: notice not all the libraries are fat32 architecture--make sure > you link in fat32 binaries (the one that the 'file' commands states are > "universal binary with 2 architectures) if you want a universal (n this case > fat32) build. You will also need to adjust your target build settings to > include the architectures you want to build for. read teh Xocde docs to > learn how to do this. I have tried tweaking Boost to give me a fat quad > build (i386, ppc, ppc64, x86_64) yet because of the use of bjam. > > > If you are not having this occur, it might be that you have CFLAGS< > CXXFLAGS, and LDFLAGS set to "-arch i386" rather than "-arch i386 -arch ppc" > somewhere in your environment. It might help to set them explicitly in the > shell and export them before running Boost though Boost might override them. > Bjam is too arcane for me to try and figure out how Boost build works--I > just don't have the time avaialbe with all the other things I need to learn > more about and projects I need to work on. > > PATHS > ----- > At first I tried using the default install location for the Boost > libraries (/usr/local) but that was problematic with Xcode since it seemed > to grab the first libboost_filesystem binary is found and it would be of the > wrong architecture. Longer term, I am hoping that delving into the Xcode > documentation will produce a more elegant solution to this, but for now I > jsut use brute force and copy the files I need to the project folder. If > you use source control this has the advantage of freezing the dependent > library versions for SCM archiving--few things more vexing than having a > library change versions and break your code. Specifically, I copy the > relevant files to the project root directory, the path in the Xcode > environment variable $(SRCROOT): > > 1)I copy all the boost includes into my project root folder. Copy the > 'boost' folder inside boost_1_34_1, once you get it working you can pull out > the ones you dont need. Also you could probably put the m in a silgne > diretory hierarchy rooted somewhere below your home to avoid the copying, > but you can work that out later--I want to keep things simple now to get it > working first. > > 2) I copy the particular libraries I need in a folder named "lib" in > $(SRCROOT). See above in ARCHITECURES to make sure you copy the right files. > Check them iwth the 'file' command to be sure they are universal binaries of > the desired type. > > 3) Modify your build settings for the target (right-click on the target in > the Xcode project view and select the build tab). lot of settings there to > tweak, but you jsut need to setHEader Search Paths and Library Search Paths > to $(SRCROOT). IMPORTNT: do not check recursive or it whacks your name sapce > and you'll get error on building like " 'snprintf' is nto a memeber of > 'std'". this dorve me nearly insane when it first happened until I figured > it out. I should have RTFM'd and could have avoided the pain and anguish. > > 4) open the target tree to expose the build phases (click on the trainagle > next to the target) and you'll see three standard phases: Compile Sources, > Link Binary With Libraries, and Copy Files. right-click on Link Binary With > Libraries and selet add existing file and select you libraries from the file > choose dialog. > > If this is a all done correctly you should get a fat32 copile fo your > application that works. At least it works for me. As I have said repeatedly, > this is a quick and dirty regime that works but is sub-optimal. Over time > I'll refine it to ake it more efficient and maintainable. But to goal here > is to get you moving with Boost and Xcode universal builds. > > I am no expert but this worked for me. > HTH > > Daniel Lord > 1 March 2008 > > --- > Some people building C++/Obj-C code on OS X with Xcode and have a problem > think:"I know, I'll use the Boost Libraries". Now they have two > problems--three if they needed regular expressions. ;-) > > > On 3/1/08, Lothar May <boost_at_[hidden]> wrote: > > Hi Daniel, > > > > thank you very much for testing it. It's great that it works for you. > > Could you please tell me how you built boost? It seems you are using > the > > i386 architecture. Is your boost build a universal build, i.e. will the > > programs run on PowerPC as well? > > > > The problem for me is that I do not have a PowerPC based system, so I > > cannot build boost on a PowerPC and on an i386 system and copy them to > a > > universal build - instead I need to compile both on the i386 system. > The > > way I tried to do this, although as documented, seems to break the > > exception support. Maybe we can find a way to merge the way you are > > building boost with the additional options needed for a universal > build. > > > > Thanks again, > > > > Lothar > > > > > > Daniel Lord wrote: > > > It worked fine for me: > > > > > > [09:46:50] daniello_at_Mercury > > > ~/Documents/Development/Study/Xcode-Boost/BoostExceptionTest > > > $uname -a > > > Darwin dhcp-2op9-2op10-east-130-35-99-215.usdhcp.oraclecorp.com > > > <http://dhcp-2op9-2op10-east-130-35-99-215.usdhcp.oraclecorp.com> > 9.2.0 > > > Darwin Kernel Version 9.2.0: Tue Feb 5 16:13:22 PST 2008; > > > root:xnu-1228.3.13~1/RELEASE_I386 i386 > > > [09:46:57] daniello_at_Mercury > > > ~/Documents/Development/Study/Xcode-Boost/BoostExceptionTest > > > $./BoostExceptionTest /fake > > > This is never printed on MacOS 10.5. > > > > > > > > > On 2/26/08, *Lothar May* <boost_at_[hidden] > > > <mailto:boost_at_[hidden]>> wrote: > > > > > > Hi Daniel, > > > > > > compiling boost is successful on my system, too. Are boost > exceptions > > > caught using your build? Is your build universal? > > > > > > > I missed the thread on this, but I'll help you out if I > can--just > > > > bring me up to speed. > > > > > > Sample test code is this: > > > > > > --cut here-- > > > > > > #include <iostream> > > > #include <boost/filesystem.hpp> > > > > > > using namespace std; > > > using namespace boost::filesystem; > > > > > > int > > > main() > > > { > > > try > > > { > > > directory_iterator i("does_not_exist"); > > > } catch(...) > > > { > > > cout << "This is never printed on MacOS 10.5." << endl; > > > } > > > return 0; > > > } > > > > > > --cut here-- > > > > > > Best regards, > > > > > > Lothar > > > > > > > > > _______________________________________________ > > > Boost-users mailing list > > > Boost-users_at_[hidden] <mailto:Boost-users_at_[hidden]> > > > http://lists.boost.org/mailman/listinfo.cgi/boost-users > > > > > > > > > > > > > > > > > > > ------------------------------------------------------------------------ > > > > > > _______________________________________________ > > > Boost-users mailing list > > > Boost-users_at_[hidden] > > > http://lists.boost.org/mailman/listinfo.cgi/boost-users > > > > _______________________________________________ > > Boost-users mailing list > > Boost-users_at_[hidden] > > http://lists.boost.org/mailman/listinfo.cgi/boost-users > > > > > -- > > > > >
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net