Daniel Reetz, the founder of the DIY Book Scanner community, has recently started making videos of prototyping and shop tips. If you are tinkering with a book scanner (or any other project) in your home shop, these tips will come in handy. https://www.youtube.com/channel/UCn0gq8 ... g_8K1nfInQ

Building Scan Tailor on OSX

Scan Tailor specific announcements, releases, workflows, tips, etc. NO FEATURE REQUESTS IN THIS FORUM, please.
Tulon
Posts: 687
Joined: 03 Oct 2009, 06:13
Number of books owned: 0
Location: London, UK
Contact:

Re: Building Scan Tailor on OSX

Post by Tulon » 30 Jul 2010, 19:32

Again, I am no expert on OSX dynamic linker, but on Linux, statically linking to those libraries wouldn't have helped. Linking them statically wouldn't prevent their symbols from being exported (from the scantailor executable) and therefore from being available for Qt to bind to.
Scan Tailor experimental doesn't output 96 DPI images. It's just what your software shows when DPI information is missing. Usually what you get is input DPI times the resolution enhancement factor.

User avatar
n9yty
Posts: 72
Joined: 25 Jul 2010, 22:13

Re: Building Scan Tailor on OSX

Post by n9yty » 30 Jul 2010, 19:46

I still do not believe it was the issue, but I suppose it could have been. If it were, wouldn't the errors in the crash dump have pointed to some function trying to actually utilize the library functions? It was crashing in the QEventLoop::exec method. I was puzzled by that, which is why I tried a different Qt (was going to compile my own next) because there was no trace of where or what it was doing that was causing it to die.

Also, the precompiled Qt libraries appear to be built so that they do not use the system imaging libraries, they use plugin modules named libqjpeg, libqtiff, etc (although no png unless the libqmng handles png too). At any rate, this also would avoid the above issue if I'm not mistaken.

Thanks again for your hard work, even though I haven't build a scanner yet (soon!) this will undoubtedly be extremely useful.

knappen
Posts: 35
Joined: 29 Jul 2010, 20:21

Re: Building Scan Tailor on OSX

Post by knappen » 31 Jul 2010, 15:29

Hi

With the new version, the program doesn't crash anymore when I run it on a mixed folder, but it seems that Scan Tailor can't quite grasp the png image, which is left with a question mark in "Select content/Margins". This of course means that one can't get to "Output" as the final size of pages isn't decided.

User avatar
n9yty
Posts: 72
Joined: 25 Jul 2010, 22:13

Re: Building Scan Tailor on OSX

Post by n9yty » 31 Jul 2010, 15:56

knappen wrote:when I run it on a mixed folder, but it seems that Scan Tailor can't quite grasp the png image, which is left with a question mark in "Select content/Margins". This of course means that one can't get to "Output" as the final size of pages isn't decided.
I just ran a batch on the PowerPC G4 system I have, running 10.5, and I cannot duplicate this. I will have to try it on a few other systems at work next week with different OS versions and Intel/PPC processors.

afdezc
Posts: 2
Joined: 04 Mar 2014, 00:53

Re: Building Scan Tailor on OSX

Post by afdezc » 08 Oct 2010, 12:11

I have followed the instructions to build Scan Tailor on OSX (I have Snow Leopard, 10.6.4) to the dot. I get a compiling error when I get to 83% and I can't get past that:

[ 83%] Building CXX object CMakeFiles/scantailor.dir/ProjectFilesDialog.cpp.o
/opt/local/include/boost/lambda/detail/function_adaptors.hpp: In static member function ‘static RET boost::lambda::function_adaptor<T Object::*>::apply(T Object::*, const Object&) [with RET = int&, Object = std::pair<int, int>, T = int]’:
/opt/local/include/boost/lambda/detail/actions.hpp:87: instantiated from ‘static RET boost::lambda::function_action<2, T>::apply(A1&, A2&) [with RET = int&, A1 = int std::pair<int, int>::* const, A2 = const std::pair<int, int>, T = boost::lambda::detail::unspecified]’
/opt/local/include/boost/lambda/detail/lambda_functor_base.hpp:424: instantiated from ‘RET boost::lambda::lambda_functor_base<boost::lambda::action<2, Act>, Args>::call(A&, B&, C&, Env&) const [with RET = int&, A = const std::pair<int, int>, B = const std::pair<int, int>, C = const boost::tuples::null_type, Env = const boost::tuples::null_type, Act = boost::lambda::function_action<2, boost::lambda::detail::unspecified>, Args = boost::tuples::tuple<int std::pair<int, int>::* const, const boost::lambda::lambda_functor<boost::lambda::placeholder<2> >, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type>]’
/opt/local/include/boost/lambda/detail/select_functions.hpp:30: instantiated from ‘typename Arg::sig<boost::tuples::tuple<A&, B&, C&, Env&, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type> >::type boost::lambda::detail::select(const boost::lambda::lambda_functor<T>&, A&, B&, C&, Env&) [with Arg = boost::lambda::lambda_functor_base<boost::lambda::action<2, boost::lambda::function_action<2, boost::lambda::detail::unspecified> >, boost::tuples::tuple<int std::pair<int, int>::* const, const boost::lambda::lambda_functor<boost::lambda::placeholder<2> >, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type> >, A = const std::pair<int, int>, B = const std::pair<int, int>, C = const boost::tuples::null_type, Env = const boost::tuples::null_type]’
/opt/local/include/boost/lambda/detail/operator_lambda_func_base.hpp:218: instantiated from ‘RET boost::lambda::lambda_functor_base<boost::lambda::relational_action<boost::lambda::less_action>, Args>::call(A&, B&, C&, Env&) const [with RET = bool, A = const std::pair<int, int>, B = const std::pair<int, int>, C = const boost::tuples::null_type, Env = const boost::tuples::null_type, Args = boost::tuples::tuple<boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<2, boost::lambda::function_action<2, boost::lambda::detail::unspecified> >, boost::tuples::tuple<int std::pair<int, int>::* const, const boost::lambda::lambda_functor<boost::lambda::placeholder<1> >, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type> > >, boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<2, boost::lambda::function_action<2, boost::lambda::detail::unspecified> >, boost::tuples::tuple<int std::pair<int, int>::* const, const boost::lambda::lambda_functor<boost::lambda::placeholder<2> >, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type> > >, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type>]’
/opt/local/include/boost/lambda/detail/lambda_functors.hpp:234: instantiated from ‘typename T::sig<boost::tuples::tuple<const A&, const B&, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type> >::type boost::lambda::lambda_functor<Base>::operator()(const A&, const B&) const [with A = std::pair<int, int>, B = std::pair<int, int>, T = boost::lambda::lambda_functor_base<boost::lambda::relational_action<boost::lambda::less_action>, boost::tuples::tuple<boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<2, boost::lambda::function_action<2, boost::lambda::detail::unspecified> >, boost::tuples::tuple<int std::pair<int, int>::* const, const boost::lambda::lambda_functor<boost::lambda::placeholder<1> >, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type> > >, boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<2, boost::lambda::function_action<2, boost::lambda::detail::unspecified> >, boost::tuples::tuple<int std::pair<int, int>::* const, const boost::lambda::lambda_functor<boost::lambda::placeholder<2> >, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type> > >, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type> >]’
/usr/include/c++/4.2.1/bits/stl_algo.h:125: instantiated from ‘const _Tp& std::__median(const _Tp&, const _Tp&, const _Tp&, _Compare) [with _Tp = std::pair<int, int>, _Compare = boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::relational_action<boost::lambda::less_action>, boost::tuples::tuple<boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<2, boost::lambda::function_action<2, boost::lambda::detail::unspecified> >, boost::tuples::tuple<int std::pair<int, int>::* const, const boost::lambda::lambda_functor<boost::lambda::placeholder<1> >, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type> > >, boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<2, boost::lambda::function_action<2, boost::lambda::detail::unspecified> >, boost::tuples::tuple<int std::pair<int, int>::* const, const boost::lambda::lambda_functor<boost::lambda::placeholder<2> >, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type> > >, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type> > >]’
/usr/include/c++/4.2.1/bits/stl_algo.h:2795: instantiated from ‘void std::__introsort_loop(_RandomAccessIterator, _RandomAccessIterator, _Size, _Compare) [with _RandomAccessIterator = std::pair<int, int>*, _Size = long int, _Compare = boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::relational_action<boost::lambda::less_action>, boost::tuples::tuple<boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<2, boost::lambda::function_action<2, boost::lambda::detail::unspecified> >, boost::tuples::tuple<int std::pair<int, int>::* const, const boost::lambda::lambda_functor<boost::lambda::placeholder<1> >, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type> > >, boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<2, boost::lambda::function_action<2, boost::lambda::detail::unspecified> >, boost::tuples::tuple<int std::pair<int, int>::* const, const boost::lambda::lambda_functor<boost::lambda::placeholder<2> >, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type> > >, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type> > >]’
/usr/include/c++/4.2.1/bits/stl_algo.h:2866: instantiated from ‘void std::sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = std::pair<int, int>*, _Compare = boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::relational_action<boost::lambda::less_action>, boost::tuples::tuple<boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<2, boost::lambda::function_action<2, boost::lambda::detail::unspecified> >, boost::tuples::tuple<int std::pair<int, int>::* const, const boost::lambda::lambda_functor<boost::lambda::placeholder<1> >, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type> > >, boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<2, boost::lambda::function_action<2, boost::lambda::detail::unspecified> >, boost::tuples::tuple<int std::pair<int, int>::* const, const boost::lambda::lambda_functor<boost::lambda::placeholder<2> >, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type> > >, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type> > >]’
/Users/anabeli/Downloads/scantailor-0.9.9.1/ProjectFilesDialog.cpp:703: instantiated from here
/opt/local/include/boost/lambda/detail/function_adaptors.hpp:264: error: invalid initialization of reference of type ‘int&’ from expression of type ‘const int’
make[2]: *** [CMakeFiles/scantailor.dir/ProjectFilesDialog.cpp.o] Error 1
make[1]: *** [CMakeFiles/scantailor.dir/all] Error 2
make: *** [all] Error 2

How can I fix this?
Many thanks,
Anabeli

Tulon
Posts: 687
Joined: 03 Oct 2009, 06:13
Number of books owned: 0
Location: London, UK
Contact:

Re: Building Scan Tailor on OSX

Post by Tulon » 08 Oct 2010, 16:53

It's an incompatibility with the latest boost. It's fixed in Git, so you can build that, or you can take just the file ProjectFilesDialog.cpp from there. I do plan to make a new release in the nearest future, so your third option would be waiting for that to happen. Oh, and the fourth one is to downgrade boost.
Scan Tailor experimental doesn't output 96 DPI images. It's just what your software shows when DPI information is missing. Usually what you get is input DPI times the resolution enhancement factor.

afdezc
Posts: 2
Joined: 04 Mar 2014, 00:53

Re: Building Scan Tailor on OSX

Post by afdezc » 09 Oct 2010, 15:58

Git worked fine. Thanks a lot!

Denivic
Posts: 13
Joined: 08 Nov 2010, 02:56
Number of books owned: 0
Country: USA
Location: Online
Contact:

Re: Building Scan Tailor on OSX

Post by Denivic » 12 Nov 2010, 14:10

Hey everyone, I am still making my rounds around these threads, so forgive me if i ask a redundant question. Can someone point me to the URL for Scan Tailor MAC version.

Thanks in advance,

User avatar
daniel_reetz
Posts: 2786
Joined: 03 Jun 2009, 13:56
E-book readers owned: Used to have a PRS-500
Number of books owned: 600
Country: United States
Contact:

Re: Building Scan Tailor on OSX

Post by daniel_reetz » 12 Nov 2010, 14:26

here's one version.

Denivic
Posts: 13
Joined: 08 Nov 2010, 02:56
Number of books owned: 0
Country: USA
Location: Online
Contact:

Re: Building Scan Tailor on OSX

Post by Denivic » 12 Nov 2010, 16:45

Thanks daniel I will try it out.

Post Reply