Jump to content
Kroopson

Kompilacja Alembic'a pod windowsem

Recommended Posts

Hej!

Próbował ktoś może skompilować bibliotekę i pluginy alembic'a pod windowsem?

Byłbym bardzo wdzięczny za jakiekolwiek wskazówki bo odbijam się od jakichś bzdur w stylu linkowania libboost.

Share this post


Link to post
Share on other sites

Czołem

Ja próbowałem, ale dawno się poddałem w kwestii kompilacji VFXów pod windows :) Zawsze coś nie sztymuje, dlatego kombinujemy z pełną przesiadką na linuksa. Jako że z win+alembic walczyłem dość dawno, to niepamiętam szczegółów, ale wygrzebałem jakieś notki.

 

Co do boosta, kompilacja z flagą address-model=64 pomagała:

bjam toolset=msvc-10.0 link=static threading=multi address-model=64 release stage

 

Gdzieś też pojawiała się definicja _WIN64, związana z bugiem visuala i adresowaniem pamięci.

 

Wiem, że to niewiele, ale może jednak coś. Goodluck ;)

Share this post


Link to post
Share on other sites

Dzięki - generalnie w aktualnej wersji alembic'a jest co prawda zestaw jakichś skryptów które w teorii powinny zbudować go ale w praktyce jest z nimi coś mocno nie tak.

Jako build system użyty jest cmake, który sam w sobie jest dla mnie jeszcze mocno enigmatyczny ale się nie poddaję :)

Share this post


Link to post
Share on other sites

Dobra - odbijam się od czegoś takiego:

 

 1>------ Build started: Project: ZERO_CHECK, Configuration: RelWithDebInfo x64 ------
 2>------ Build started: Project: boostTest, Configuration: RelWithDebInfo x64 ------
 2>  Microsoft (R) C/C++ Optimizing Compiler Version 16.00.40219.01 for x64
 2>  Copyright (C) Microsoft Corporation.  All rights reserved.
 2>  
 2>  cl /c /Zi /W3 /WX- /O2 /Ob1 /D _WIN64 /D NDEBUG /D "CMAKE_INTDIR=\"RelWithDebInfo\"" /D _MBCS /Gm- /EHsc /MT /GS /fp:precise /Zc:wchar_t /Zc:forScope /GR /Fo"boostTest.dir\RelWithDebInfo\\" /Fd"boostTest.dir\RelWithDebInfo\vcWindows7.1SDK.pdb" /Gd /TP /errorReport:prompt ..\boost_trycompile.cpp
 2>  
 2>  boost_trycompile.cpp
 2>D:\alembic\out\boost\include\boost-1_42\boost/thread/future.hpp(411): warning C4267: 'initializing' : conversion from 'size_t' to 'unsigned int', possible loss of data
 2>boost_trycompile.obj : error LNK2019: unresolved external symbol "private: void __cdecl boost::thread::start_thread(void)" ([email protected]@[email protected]@AEAAXXZ) referenced in function "public: __cdecl boost::thread::thread(void (__cdecl*)(void),struct boost::thread::dummy *)" ([email protected]@[email protected]@[email protected]@01  @@Z)
 2>boost_trycompile.obj : error LNK2019: unresolved external symbol "public: __cdecl boost::thread::~thread(void)" ([email protected]@@[email protected]) referenced in function main
 2>boost_trycompile.obj : error LNK2019: unresolved external symbol "public: void __cdecl boost::thread::join(void)" ([email protected]@[email protected]@QEAAXXZ) referenced in function main
 2>D:\alembic\boost_trycompile\build\RelWithDebInfo\b  oostTest.exe : fatal error LNK1120: 3 unresolved externals
 3>------ Skipped Build: Project: ALL_BUILD, Configuration: RelWithDebInfo x64 ------
 3>Project not selected to build for this solution configuration 
 ========== Build: 1 succeeded, 1 failed, 0 up-to-date, 1 skipped ==========

Share this post


Link to post
Share on other sites

Biblioteki boost'a na pewno się odnajdują ? Wygląda na to, że kompilator ich nie znalazł...

Nie pamiętam, czy alembic pod windows nie wymagał kompilacji boost'a z konkretnym nazewnictwem, chodzi o to:

 

http://www.boost.org/doc/libs/1_55_0/more/getting_started/windows.html#library-naming

 

Z dokumentacji alembica https://code.google.com/p/alembic/source/browse/doc/Boost-howtobuild.txt :

 

./bjam install --layout=versioned link=static threading=multi cxxflags=-fPIC

 

Ale zapewne o tym wiesz... Wersja boost'a też się zgadza? Pewnie nic nie pomogłem ;) pod linuksem idzie gładko

Share this post


Link to post
Share on other sites

Boost jest skompilowany i się odnajduje (co samo w sobie jest osiągnięciem). No nic - walczę dalej :)

Share this post


Link to post
Share on other sites

Ok doszedłem do takiego momentu że mi sie biblioteki nie chcą poprawnie linkować. Może jakaś mądra głowa podpowie? :(

 

 

 

2>ClCompile:
2>  All outputs are up-to-date.
2>hdf5.lib(H5.obj) : error LNK2005: DllMain already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "void __cdecl std::_Xlength_error(char const *)" ([email protected]@@[email protected]) already defined in libcpmt.lib(xthrow.obj)
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "void __cdecl std::_Xout_of_range(char const *)" ([email protected]@@[email protected]) already defined in libcpmt.lib(xthrow.obj)
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: virtual __cdecl std::basic_streambuf >::~basic_streambuf >(void)" ([email protected][email protected]@[email protected]@@[email protected]@[email protected]) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: class std::basic_ostream > & __cdecl std::basic_ostream >::flush(void)" ([email protected][email protected][email protected]@[email protected]@@[email protected]@[email protected]) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: void __cdecl std::basic_ostream >::_Osfx(void)" ([email protected][email protected][email protected]@[email protected]@@[email protected]@QEAAXXZ) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "bool __cdecl std::uncaught_exception(void)" ([email protected]@@YA_NXZ) already defined in libcpmt.lib(uncaught.obj)
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: void __cdecl std::basic_ios >::setstate(int,bool)" ([email protected][email protected][email protected]@[email protected]@@[email protected]@[email protected]) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: __int64 __cdecl std::basic_streambuf >::sputn(char const *,__int64)" ([email protected][email protected][email protected]@[email protected]@@[email protected]@[email protected]) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: int __cdecl std::basic_streambuf >::sputc(char)" ([email protected][email protected][email protected]@[email protected]@@[email protected]@[email protected]) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: class std::basic_ostream > & __cdecl std::basic_ostream >::operator2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: virtual __cdecl std::basic_iostream >::~basic_iostream >(void)" ([email protected][email protected]@[email protected]@@[email protected]@[email protected]) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "protected: char * __cdecl std::basic_streambuf >::_Pninc(void)" ([email protected][email protected][email protected]@[email protected]@@[email protected]@IEAAPEADXZ) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "protected: __cdecl std::basic_streambuf >::basic_streambuf >(void)" ([email protected][email protected]@[email protected]@@[email protected]@[email protected]) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "private: static void __cdecl std::ios_base::_Ios_base_dtor(class std::ios_base *)" ([email protected][email protected]@@[email protected]@Z) already defined in libcpmt.lib(ios.obj)
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: virtual __cdecl std::basic_ios >::~basic_ios >(void)" ([email protected][email protected]@[email protected]@@[email protected]@[email protected]) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: __cdecl std::basic_iostream >::basic_iostream >(class std::basic_streambuf > *)" ([email protected][email protected]@[email protected]@@[email protected]@[email protected][email protected][email protected]@[email protected]@@[email protected]@Z) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "protected: __cdecl std::basic_ios >::basic_ios >(void)" (??0[email protected][email protected]@[email protected]@@[email protected]@[email protected]) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: void __cdecl std::_Container_base0::_Orphan_all(void)" ([email protected][email protected]@@QEAAXXZ) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: virtual __cdecl std::basic_ostream >::~basic_ostream >(void)" ([email protected][email protected]@[email protected]@@[email protected]@[email protected]) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: __cdecl std::basic_ostream >::basic_ostream >(class std::basic_streambuf > *,bool)" ([email protected][email protected]@[email protected]@@[email protected]@[email protected][email protected][email protected]@[email protected]@@[email protected][email protected]) already defined in AttributesWriter.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "protected: void __cdecl std::basic_streambuf >::setg(char *,char *,char *)" ([email protected][email protected][email protected]@[email protected]@@[email protected]@[email protected]) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: class std::basic_ostream > & __cdecl std::basic_ostream >::operator2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: class std::basic_ostream > & __cdecl std::basic_ostream >::operator2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: class std::locale::facet * __cdecl std::locale::facet::_Decref(void)" ([email protected]@[email protected]@@[email protected]) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "private: static class std::locale::_Locimp * __cdecl std::locale::_Getgloballocale(void)" ([email protected]@[email protected]@[email protected]@XZ) already defined in libcpmt.lib(locale0.obj)
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "protected: void __cdecl std::basic_streambuf >::_Init(void)" ([email protected][email protected][email protected]@[email protected]@@[email protected]@IEAAXXZ) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: __cdecl std::_Lockit::~_Lockit(void)" ([email protected]@@[email protected]) already defined in libcpmt.lib(xlock.obj)
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: void __cdecl std::locale::facet::_Incref(void)" ([email protected]@[email protected]@@QEAAXXZ) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: __cdecl std::locale::id::operator unsigned __int64(void)" ([email protected]@[email protected]@QEAA_KXZ) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: __cdecl std::_Lockit::_Lockit(int)" ([email protected]@@[email protected]@Z) already defined in libcpmt.lib(xlock.obj)
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: void __cdecl std::basic_ios >::clear(int,bool)" ([email protected][email protected][email protected]@[email protected]@@[email protected]@[email protected]) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: virtual __cdecl std::basic_istream >::~basic_istream >(void)" ([email protected][email protected]@[email protected]@@[email protected]@[email protected]) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: __cdecl std::basic_istream >::basic_istream >(class std::basic_streambuf > *,bool)" ([email protected][email protected]@[email protected]@@[email protected]@[email protected][email protected][email protected]@[email protected]@@[email protected][email protected]) already defined in AbcExport.obj
2>MSVCRT.lib(MSVCR100.dll) : error LNK2005: memmove already defined in LIBCMT.lib(memcpy.obj)
2>MSVCRT.lib(MSVCR100.dll) : error LNK2005: "public: __cdecl std::exception::exception(char const * const &)" ([email protected]@@[email protected]@Z) already defined in LIBCMT.lib(stdexcpt.obj)
2>MSVCRT.lib(MSVCR100.dll) : error LNK2005: "public: virtual __cdecl std::exception::~exception(void)" ([email protected]@@[email protected]) already defined in LIBCMT.lib(stdexcpt.obj)
2>MSVCRT.lib(MSVCR100.dll) : error LNK2005: "public: __cdecl std::exception::exception(class std::exception const &)" ([email protected]@@[email protected]@@Z) already defined in LIBCMT.lib(stdexcpt.obj)
2>MSVCRT.lib(MSVCR100.dll) : error LNK2005: "public: __cdecl std::exception::exception(void)" (??0[email protected]@@[email protected]) already defined in LIBCMT.lib(stdexcpt.obj)
2>MSVCRT.lib(MSVCR100.dll) : error LNK2005: memchr already defined in LIBCMT.lib(memchr.obj)
2>MSVCRT.lib(MSVCR100.dll) : error LNK2005: "public: bool __cdecl type_info::operator==(class type_info const &)const " ([email protected]@[email protected]@Z) already defined in LIBCMT.lib(typinfo.obj)
2>MSVCRT.lib(MSVCR100.dll) : error LNK2005: "public: __cdecl std::bad_cast::bad_cast(char const *)" ([email protected]@@[email protected]@Z) already defined in LIBCMT.lib(stdexcpt.obj)
2>MSVCRT.lib(MSVCR100.dll) : error LNK2005: fputc already defined in LIBCMT.lib(fputc.obj)
2>MSVCRT.lib(MSVCR100.dll) : error LNK2005: ungetc already defined in LIBCMT.lib(ungetc.obj)
2>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _lock_file already defined in LIBCMT.lib(_file.obj)
2>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _unlock_file already defined in LIBCMT.lib(_file.obj)
2>MSVCRT.lib(MSVCR100.dll) : error LNK2005: fflush already defined in LIBCMT.lib(fflush.obj)
2>MSVCRT.lib(MSVCR100.dll) : error LNK2005: setvbuf already defined in LIBCMT.lib(setvbuf.obj)
2>MSVCRT.lib(MSVCR100.dll) : error LNK2005: memcpy_s already defined in LIBCMT.lib(memcpy_s.obj)
2>MSVCRT.lib(MSVCR100.dll) : error LNK2005: fwrite already defined in LIBCMT.lib(fwrite.obj)
2>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _fseeki64 already defined in LIBCMT.lib(fseeki64.obj)
2>MSVCRT.lib(MSVCR100.dll) : error LNK2005: fclose already defined in LIBCMT.lib(fclose.obj)
2>MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: __cdecl type_info::type_info(class type_info const &)" ([email protected]@[email protected]@@Z) already defined in LIBCMT.lib(typinfo.obj)
2>MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __cdecl type_info::operator=(class type_info const &)" ([email protected]@[email protected]@@Z) already defined in LIBCMT.lib(typinfo.obj)
2>     Creating library D:/alembic/build/maya/AbcExport/Release/AbcExport.lib and object D:/alembic/build/maya/AbcExport/Release/AbcExport.exp
2>LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library
2>D:\alembic\build\maya\AbcExport\Release\AbcExport.mll : fatal error LNK1169: one or more multiply defined symbols found
2>
2>Build FAILED.
2>
2>Time Elapsed 00:00:00.60
========== Build: 1 succeeded, 1 failed, 7 up-to-date, 0 skipped ==========

Share this post


Link to post
Share on other sites

HA!!!!!!!!!!!!!! UDAŁO SIĘ :)

Zajęło tylko nota bene 4 miesiące ale w końcu znalazłem w czym rzecz, a oczywiście rzecz była trywialna.

W pliku H5.c w bibliotece HDF5 jest zdefiniowana funkcja dllMain. Po usunięciu jej plugin do majki zlinkował się poprawnie (i działa). Poprzednio miałem ten błąd:

 

hdf5.lib(H5.obj) : error LNK2005: DllMain already defined in AbcExport.obj

 

Jeszcze jakby ktoś się za to zabierał:

Należy zapomnieć o tym setupie który jest dostarczany razem z alembic'iem. Jest mocno nieaktualny i nie bardzo chce działać. Trzeba przysiąść do cmake'a i po kolei wyszukać wszystkie zależności. Nie obędzie się też bez kilku drobnych tweaków w kodzie (gdzieś tam trzeba dopisać #undef min i #undef max, chyba w ilmbase albo w openexr)

Edited by Kroopson

Share this post


Link to post
Share on other sites
HA!!!!!!!!!!!!!! UDAŁO SIĘ :)

Zajęło tylko nota bene 4 miesiące ale w końcu znalazłem w czym rzecz, a oczywiście rzecz była trywialna.

W pliku H5.c w bibliotece HDF5 jest zdefiniowana funkcja dllMain. Po usunięciu jej plugin do majki zlinkował się poprawnie (i działa). Poprzednio miałem ten błąd:

 

hdf5.lib(H5.obj) : error LNK2005: DllMain already defined in AbcExport.obj

 

Jeszcze jakby ktoś się za to zabierał:

Należy zapomnieć o tym setupie który jest dostarczany razem z alembic'iem. Jest mocno nieaktualny i nie bardzo chce działać. Trzeba przysiąść do cmake'a i po kolei wyszukać wszystkie zależności. Nie obędzie się też bez kilku drobnych tweaków w kodzie (gdzieś tam trzeba dopisać #undef min i #undef max, chyba w ilmbase albo w openexr)

 

Heh, zeszło Ci się, ale super, że się udało.

Co do error LNK2005: DllMain - w VC++ jest ustawienie /FORCE:MULTIPLE linkera aby ignorował wielokrotne kopie symboli

Natomiast jeśli chodzi o min/max, może wystarczyć #define NOMINMAX

Moge spytać czemu jesteś taki zapięty na Alembica i pod windows ?

Share this post


Link to post
Share on other sites

Robię to nie tyle dla samego alembic'a co dla zmierzenia się z tematem. Coś jak misja na księżyc, nie ma bezpośredniego zysku ale pośrednio dużo mi pozostało po tej przygodzie. Dzięki temu nauczyłem się cmake'a i dość sporo dowiedziałem się o linkowaniu bibliotek.

Teraz mam wszystkie pluginy które rozwijamy w naszym dzizale pod kontrolą cmake'a i mogę próbować kolejnych ciekawych rzeczy.

Share this post


Link to post
Share on other sites
Robię to nie tyle dla samego alembic'a co dla zmierzenia się z tematem. Coś jak misja na księżyc, nie ma bezpośredniego zysku ale pośrednio dużo mi pozostało po tej przygodzie. Dzięki temu nauczyłem się cmake'a i dość sporo dowiedziałem się o linkowaniu bibliotek.

Teraz mam wszystkie pluginy które rozwijamy w naszym dzizale pod kontrolą cmake'a i mogę próbować kolejnych ciekawych rzeczy.

 

kapuję...

Też hoduję swoje projekty na CMake'u (i mercurialu). Powodzenia w przyszłych projektach, wiem, że to ciężki kawałek chleba :)

Ostatnio mierzyłem się z OpenVDB i cortexem

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

We are using cookies. Read about our Privacy Policy