> The proper resolution is to finish the libbitcoin DLL exports. I put it
> off because there was no compelling current scenario. It's certainly not
> impossible.
>
> I already added DLL exports to libsecp256k1, so you can build and link
> it dynamically. Boost also provides DLLs.
>
> In the mean time, mixing CRT linkage is unsafe but can work. Depends on
> the features used.
>
> Libs are collections of objects and don't incorporate objects from other
> libs. Static linking merges the transitive closure of statically-linked
> dependencies into an executable or DLL.
>
> So link the appropriate secp256k1.dll and you should be good, apart from
> the CRT risk.
>
> e
>
>
>
> On Mar 24, 2015, at 4:30 AM, Bedeho Mender <bedeho.mender@???
> <mailto:bedeho.mender@gmail.com>> wrote:
>
>> So it turns out that Qt libraries are dynamically linked with the C++
>> runtime.
>>
>> Also, you said that libbitcoin should be built with static C++ runtime
>> linking.
>>
>> Mixing is not a good idea, as you and others have said, so I tried to
>> rebuild libbitcoin now
>> with dynamic linking, by going in MSVC to
>>
>> Solution Explorer->Properties->Configuration Properties->C/C++->Code
>> Generation->Runtime Library
>>
>> and choosing Multi-threaded Debug DLL (/MDd).
>>
>> This rebuilding works, and I am able to now link my Qt project to
>> libbitcoin while actually using some basic libbitcoin functions.
>>
>> My question is, is this safe? Also, what about other dependencies
>> which libbitcoin has, I assume the link settings in the MSVC
>> libbitcoin project do not propagate to these? If so,why do you think
>> rebuilding libbitcoin worked?
>>
>> Also, when I try to use more complicated libbitcoin features (right
>> now Im just using data_chunk and decode_base16) which involve
>> transactions and signing, then the linker cannot find secp2561 library:
>>
>> libbitcoin.lib(ec_keys.obj) : error LNK2019: unresolved external
>> symbol secp256k1_stop referenced in function "public: __cdecl
>> libbitcoin::init_singleton::~init_singleton(void)"
>> (??1init_singleton@libbitcoin@@QEAA@XZ)
>>
>> Shouldnt that be statically linked into libbitcoin?
>>
>> best
>> Bedeho
>>
>>
>> On 24 March 2015 at 11:09, Bedeho Mender <bedeho.mender@???
>> <mailto:bedeho.mender@gmail.com>> wrote:
>>
>> Fantastic, that worked!
>>
>> I am now able to build a project which includes libbitcoin headers!
>>
>> I get a bunch of issues with linking when I actually try to use
>> libbitcoin functions, but I think I may be able to resolve those.
>>
>> Thanks a lot Eric!
>>
>> On 24 March 2015 at 10:17, Eric Voskuil <eric@???
>> <mailto:eric@voskuil.org>> wrote:
>>
>> This isn't a problem with cross-compiler linking (or a
>> regression), it's
>> simply the result of the fact that we don't yet have the
>> exports/imports
>> properly/fully defined for DLL linkage (not yet supported).
>>
>> The errors are the result of BC_API getting defined to
>> __declspec(dllimport). You just need to define BC_STATIC. See
>> define.hpp.
>>
>> e
>>
>> On 03/24/2015 01:16 AM, Eric Voskuil wrote:
>> > Hi Bedeho,
>> >
>> > I suspect the errors are the result of a change I made today
>> in master.
>> > I'll look into it.
>> >
>> > The define warning pertains to your project. All libbitcoin
>> VS. projects
>> > declare Windows XP SP2 as the build target:
>> >
>> > _WIN32_WINNT=0x0600
>> >
>> > If you currently have no reason to do otherwise I'd
>> recommend you do the
>> > same in your project.
>> >
>> > e
>> >
>> > On 03/24/2015 12:01 AM, Bedeho Mender wrote:
>> >> Hi Eric,
>> >>
>> >> Giving the new headers a try.
>> >>
>> >> As before, built libbitcoin with MSVC Nov 2013 CTP, and
>> then I have an
>> >> example Qt project which uses the vanilla MSVC2013.
>> >>
>> >> I get different build errors this time, and fewer of them.
>> As one would
>> >> expect, nothing related to constexpr.
>> >>
>> >> There are basically headers which cause problems, as seen
>> by these errors
>> >>
>> >>
>> C:\libbitcoin\libbitcoin\include\bitcoin/bitcoin/math/hash_number.hpp(74)
>> :
>> >> error C2375: 'libbitcoin::operator >' : redefinition;
>> different linkage
>> >>
>> >>
>> C:\libbitcoin\libbitcoin\include\bitcoin/bitcoin/math/hash_number.hpp(57)
>> :
>> >> see declaration of 'libbitcoin::operator >'
>> >>
>> >>
>> C:\libbitcoin\libbitcoin\include\bitcoin/bitcoin/math/hash_number.hpp(76)
>> :
>> >> error C2375: 'libbitcoin::operator <=' : redefinition;
>> different linkage
>> >>
>> >>
>> C:\libbitcoin\libbitcoin\include\bitcoin/bitcoin/math/hash_number.hpp(59)
>> :
>> >> see declaration of 'libbitcoin::operator <='
>> >>
>> >>
>> C:\libbitcoin\libbitcoin\include\bitcoin/bitcoin/math/hash_number.hpp(78)
>> :
>> >> error C2375: 'libbitcoin::operator <<' : redefinition;
>> different linkage
>> >>
>> >>
>> C:\libbitcoin\libbitcoin\include\bitcoin/bitcoin/math/hash_number.hpp(61)
>> :
>> >> see declaration of 'libbitcoin::operator <<'
>> >>
>> >>
>> C:\libbitcoin\libbitcoin\include\bitcoin/bitcoin/math/hash_number.hpp(80)
>> :
>> >> error C2375: 'libbitcoin::operator /' : redefinition;
>> different linkage
>> >>
>> >>
>> C:\libbitcoin\libbitcoin\include\bitcoin/bitcoin/math/hash_number.hpp(63)
>> :
>> >> see declaration of 'libbitcoin::operator /'
>> >>
>> >>
>> C:\libbitcoin\libbitcoin\include\bitcoin/bitcoin/math/hash_number.hpp(82)
>> :
>> >> error C2375: 'libbitcoin::operator +' : redefinition;
>> different linkage
>> >>
>> >>
>> C:\libbitcoin\libbitcoin\include\bitcoin/bitcoin/math/hash_number.hpp(65)
>> :
>> >> see declaration of 'libbitcoin::operator +'
>> >>
>> >>
>> C:\libbitcoin\libbitcoin\include\bitcoin/bitcoin/math/hash_number.hpp(84)
>> :
>> >> error C2375: 'libbitcoin::operator ==' : redefinition;
>> different linkage
>> >>
>> >>
>> C:\libbitcoin\libbitcoin\include\bitcoin/bitcoin/math/hash_number.hpp(67)
>> :
>> >> see declaration of 'libbitcoin::operator =='
>> >>
>> >> Please define _WIN32_WINNT or _WIN32_WINDOWS appropriately.
>> For example:
>> >>
>> >> - add -D_WIN32_WINNT=0x0501 to the compiler command line; or
>> >>
>> >> - add _WIN32_WINNT=0x0501 to your project's Preprocessor
>> Definitions.
>> >>
>> >> Assuming _WIN32_WINNT=0x0501 (i.e. Windows XP target).
>> >>
>> >>
>> C:\libbitcoin\libbitcoin\include\bitcoin/bitcoin/utility/binary.hpp(79)
>> >> : error C2375: 'libbitcoin::operator ==' : redefinition;
>> different linkage
>> >>
>> >>
>> C:\libbitcoin\libbitcoin\include\bitcoin/bitcoin/utility/binary.hpp(64)
>> >> : see declaration of 'libbitcoin::operator =='
>> >>
>> >>
>> C:\libbitcoin\libbitcoin\include\bitcoin/bitcoin/utility/binary.hpp(84)
>> >> : error C2375: 'libbitcoin::operator >>' : redefinition;
>> different linkage
>> >>
>> >>
>> C:\libbitcoin\libbitcoin\include\bitcoin/bitcoin/utility/binary.hpp(66)
>> >> : see declaration of 'libbitcoin::operator >>'
>> >>
>> >>
>> C:\libbitcoin\libbitcoin\include\bitcoin/bitcoin/utility/binary.hpp(86)
>> >> : error C2375: 'libbitcoin::operator <<' : redefinition;
>> different linkage
>> >>
>> >>
>> C:\libbitcoin\libbitcoin\include\bitcoin/bitcoin/utility/binary.hpp(68)
>> >> : see declaration of 'libbitcoin::operator <<'
>> >>
>> >> This is what I'm working with:
>> https://github.com/bedeho/QtLibbitcoin
>> >>
>> >> best
>> >> Bedeho
>> >>
>> >>
>> >> On 23 March 2015 at 22:07, Eric Voskuil <eric@???
>> <mailto:eric@voskuil.org>
>> >> <mailto:eric@voskuil.org <mailto:eric@voskuil.org>>> wrote:
>> >>
>> >> Regarding the /Zc:threadSafeInit option, this was added
>> later, in the
>> >> June "VS14" CTP (now VS2015 in CTP 6), so I'm leaving
>> it as-is.
>> >>
>> >> e
>> >>
>> >>
>> >> On 03/23/2015 01:49 PM, Eric Voskuil wrote:
>> >> > I've updated all libbitcoin repos so that there is no
>> code in
>> >> published
>> >> > headers requiring the VC++ CTP compiler (generally
>> C++11 stuff, mostly
>> >> > constexpr).
>> >> >
>> >> > I've done the same in all test projects, which I've
>> also changed
>> >> to not
>> >> > use the CTP compiler and instead use VC++12. This
>> provides a
>> >> convenient
>> >> > means to ensure that the CTP requirement doesn't
>> creep into the
>> >> headers
>> >> > or break in another manner. It also provides an
>> example of how to link
>> >> > to the main libraries (built with the CTP compiler)
>> using the RTM
>> >> compiler.
>> >> >
>> >> > There is a small additional runtime library that
>> augments the CRT when
>> >> > linking with VC12. This is automatically
>> incorporated, although I may
>> >> > try and get rid of that requirement by using "
>> /Zc:threadSafeInit" as
>> >> > described here:
>> >> >
>> >> >
>> >>
>> http://blogs.msdn.com/b/vcblog/archive/2014/06/03/visual-studio-14-ctp.aspx
>> >> >
>> >> > The changes are accomplished using three new
>> libbitcoin macros
>> >> > (BC_CONSTREXPR, BC_CONSTFUNC and BC_NOEXCEPT) so that
>> non-MSVC builds
>> >> > are unaffected. These should be used in all published
>> headers and
>> >> tests.
>> >> >
>> >> > e
>> >> >
>> >> > On 03/19/2015 02:39 PM, Eric Voskuil wrote:
>> >> >> It may not be too difficult to remove from headers.
>> Templates may
>> >> >> present problems beyond the use of constexpr. I'd be
>> happy to
>> >> review a
>> >> >> pull request.
>> >> >>
>> >> >> e
>> >> >>
>> >> >> On 03/19/2015 02:07 PM, Bedeho Mender wrote:
>> >> >>> Hi Eric,
>> >> >>>
>> >> >>> Ive been talking to some Qt developers, and it
>> appears that you do
>> >> >>> indeed have to rebuild Qt with a newer MSVC
>> version, however, it
>> >> turns
>> >> >>> out that this is likely not possible with the
>> present build
>> >> system on
>> >> >>> Windows with these new versions of MSVC (for
>> reasons was not given).
>> >> >>>
>> >> >>> How difficult would it be to have a version of
>> libbitcoin where
>> >> the CTP
>> >> >>> 2013 features were taken out, so that libbitcoin
>> could be used
>> >> with the
>> >> >>> latest full release of MSVC 2013? That is, how
>> prevalent is the
>> >> usage of
>> >> >>> C++11 features which only are implemented in the
>> CTP? e.g.
>> >> constexpr.
>> >> >>>
>> >> >>> I would be happy to sponsor this dev work depending
>> on how
>> >> involved it
>> >> >>> would be, and that would allow people to use
>> libbitcoin with Qt
>> >> - which
>> >> >>> I think a lot of people will likely want to do,
>> given that Qt is the
>> >> >>> most popular C++ framework out there.
>> >> >>>
>> >> >>> best
>> >> >>> bedeho
>> >> >>>
>> >> >>>
>> >> >>>
>> >> >>> On 17 March 2015 at 20:52, Eric Voskuil
>> <eric@??? <mailto:eric@voskuil.org>
>> >> <mailto:eric@voskuil.org <mailto:eric@voskuil.org>>
>> >> >>> <mailto:eric@voskuil.org <mailto:eric@voskuil.org>
>> <mailto:eric@voskuil.org <mailto:eric@voskuil.org>>>> wrote:
>> >> >>>
>> >> >>> Ah yes, that's unfortunate. Now I remember I
>> looked at QT a
>> >> while back
>> >> >>> and determined I would need to compile QT to
>> make it work. I
>> >> decided to
>> >> >>> wait for time to resolve the issue :/
>> >> >>>
>> >> >>> e
>> >> >>>
>> >> >>> On 03/17/2015 06:27 AM, Bedeho Mender wrote:
>> >> >>> > Hi Eric, thanks for the quick response!
>> >> >>> >
>> >> >>> > It doesn't appear so to me, but perhaps I am
>> >> misunderstanding the
>> >> >>> problem.
>> >> >>> >
>> >> >>> > When I make a minimal Qt project
>> >> >>> >
>> (https://github.com/bedeho/QtLibbitcoin/blob/master/main.cpp)
>> >> >>> which uses
>> >> >>> > MSVC2013, then if I just
>> >> >>> > include the libbitcoin header #include
>> >> <bitcoin/bitcoin.hpp>, then
>> >> >>> I get
>> >> >>> > lots of compile errors.
>> >> >>> >
>> >> >>> > The errors seem to be associated with certain
>> c++11
>> >> features which
>> >> >>> > msvc2013 does
>> >> >>> > not support fully. Here is the first error I get
>> >> >>> >
>> >> >>> >
>> >>
>> C:\libbitcoin\libbitcoin\include\bitcoin/bitcoin/math/hash.hpp(31)
>> :
>> >> >>> > error C2146: syntax error : missing ';'
>> before identifier
>> >> 'size_t'
>> >> >>> >
>> >> >>> > Which references line 31 in hash.hpp:
>> >> >>> >
>> >> >>> > constexpr size_t short_hash_size = 20;
>> >> >>> >
>> >> >>> > In this case, the problem seems to be that
>> constexpr is a
>> >> new feature
>> >> >>> > which msvc2013 does not support, from what I
>> could
>> >> understand by
>> >> >>> > reading up, and that CTP_Nov2013 was required
>> for this
>> >> reason. For
>> >> >>> > example, the release notes on this CTP
>> explicitly mentions
>> >> constexpr
>> >> >>> > support
>> >> >>>
>> (http://www.microsoft.com/en-us/download/details.aspx?id=41151):
>> >> >>> > "constexpr (except for constructors)"
>> >> >>> >
>> >> >>> > Am I on the wrong track here? If not, getting
>> Qt to work
>> >> with CTP
>> >> >>> > is necessary to for using Libbitcon with Qt.
>> >> >>> >
>> >> >>> > bedeho
>> >> >>> >
>> >> >>> >
>> >> >>> > On 16 March 2015 at 22:48, Eric Voskuil
>> <eric@??? <mailto:eric@voskuil.org>
>> >> <mailto:eric@voskuil.org <mailto:eric@voskuil.org>>
>> >> >>> <mailto:eric@voskuil.org
>> <mailto:eric@voskuil.org> <mailto:eric@voskuil.org
>> <mailto:eric@voskuil.org>>>
>> >> >>> > <mailto:eric@voskuil.org
>> <mailto:eric@voskuil.org> <mailto:eric@voskuil.org
>> <mailto:eric@voskuil.org>>
>> >> <mailto:eric@voskuil.org <mailto:eric@voskuil.org>
>> <mailto:eric@voskuil.org <mailto:eric@voskuil.org>>>>> wrote:
>> >> >>> >
>> >> >>> > You can link to the libbitcoin VC++ libs
>> using the
>> >> basic v120
>> >> >>> > compiler, they are compatible.
>> >> >>> >
>> >> >>> > e
>> >> >>> >
>> >> >>> >
>> >> >>> > > On Mar 16, 2015, at 8:58 AM, Bedeho Mender
>> >> >>> > <bedeho.mender@???
>> <mailto:bedeho.mender@gmail.com>
>> >> <mailto:bedeho.mender@gmail.com
>> <mailto:bedeho.mender@gmail.com>>
>> <mailto:bedeho.mender@gmail.com <mailto:bedeho.mender@gmail.com>
>> >> <mailto:bedeho.mender@gmail.com
>> <mailto:bedeho.mender@gmail.com>>>
>> >> >>> <mailto:bedeho.mender@gmail.com
>> <mailto:bedeho.mender@gmail.com>
>> >> <mailto:bedeho.mender@gmail.com
>> <mailto:bedeho.mender@gmail.com>>
>> <mailto:bedeho.mender@gmail.com <mailto:bedeho.mender@gmail.com>
>> >> <mailto:bedeho.mender@gmail.com
>> <mailto:bedeho.mender@gmail.com>>>>>
>> >> >>> wrote:
>> >> >>> > >
>> >> >>> > > I have built libbitcoin with msvc using
>> the compiler
>> >> Microsoft
>> >> >>> > Visual C++ Compiler Nov 2013 CTP.
>> >> >>> > >
>> >> >>> > > I am trying to use libbitcoin with a Qt
>> project
>> >> running in
>> >> >>> > QtCreator, however it seems this is not
>> easy to do,
>> >> that is get Qt
>> >> >>> > to get with the CTP.
>> >> >>> > >
>> >> >>> > > Does anyone have any advice on this?
>> >> >>> > >
>> >> >>> > > best
>> >> >>> > > Bedeho
>> >> >>>
>> >> >>>
>> >> >>
>> >> >
>> >>
>> >>
>> >> _______________________________________________
>> >> Libbitcoin mailing list
>> >> Libbitcoin@???
>> <mailto:Libbitcoin@lists.dyne.org>
>> <mailto:Libbitcoin@lists.dyne.org
>> <mailto:Libbitcoin@lists.dyne.org>>
>> >>
>> https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/libbitcoin
>> >>
>> >>
>> >
>>
>>
>>