Skocz do zawartości

Kompilacja Alembic'a pod windowsem


Kroopson

Rekomendowane odpowiedzi

  • Odpowiedzi 11
  • Created
  • Ostatniej odpowiedzi

Top Posters In This Topic

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 ;)

Odnośnik do komentarza
Udostępnij na innych stronach

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ę :)

Odnośnik do komentarza
Udostępnij na innych stronach

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)" (?start_thread@thread@boost@@AEAAXXZ) referenced in function "public: __cdecl boost::thread::thread(void (__cdecl*)(void),struct boost::thread::dummy *)" (??$?0P6AXXZ@thread@boost@@QEAA@P6AXXZPEAUdummy@01  @@Z)
 2>boost_trycompile.obj : error LNK2019: unresolved external symbol "public: __cdecl boost::thread::~thread(void)" (??1thread@boost@@QEAA@XZ) referenced in function main
 2>boost_trycompile.obj : error LNK2019: unresolved external symbol "public: void __cdecl boost::thread::join(void)" (?join@thread@boost@@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 ==========

Odnośnik do komentarza
Udostępnij na innych stronach

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

Odnośnik do komentarza
Udostępnij na innych stronach

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 *)" (?_Xlength_error@std@@YAXPEBD@Z) already defined in libcpmt.lib(xthrow.obj)
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "void __cdecl std::_Xout_of_range(char const *)" (?_Xout_of_range@std@@YAXPEBD@Z) already defined in libcpmt.lib(xthrow.obj)
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: virtual __cdecl std::basic_streambuf >::~basic_streambuf >(void)" (??1?$basic_streambuf@DU?$char_traits@D@std@@@std@@UEAA@XZ) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: class std::basic_ostream > & __cdecl std::basic_ostream >::flush(void)" (?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@XZ) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: void __cdecl std::basic_ostream >::_Osfx(void)" (?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "bool __cdecl std::uncaught_exception(void)" (?uncaught_exception@std@@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)" (?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXH_N@Z) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: __int64 __cdecl std::basic_streambuf >::sputn(char const *,__int64)" (?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA_JPEBD_J@Z) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: int __cdecl std::basic_streambuf >::sputc(char)" (?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHD@Z) 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)" (??1?$basic_iostream@DU?$char_traits@D@std@@@std@@UEAA@XZ) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "protected: char * __cdecl std::basic_streambuf >::_Pninc(void)" (?_Pninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAPEADXZ) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "protected: __cdecl std::basic_streambuf >::basic_streambuf >(void)" (??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAA@XZ) 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 *)" (?_Ios_base_dtor@ios_base@std@@CAXPEAV12@@Z) already defined in libcpmt.lib(ios.obj)
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: virtual __cdecl std::basic_ios >::~basic_ios >(void)" (??1?$basic_ios@DU?$char_traits@D@std@@@std@@UEAA@XZ) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: __cdecl std::basic_iostream >::basic_iostream >(class std::basic_streambuf > *)" (??0?$basic_iostream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "protected: __cdecl std::basic_ios >::basic_ios >(void)" (??0?$basic_ios@DU?$char_traits@D@std@@@std@@IEAA@XZ) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: void __cdecl std::_Container_base0::_Orphan_all(void)" (?_Orphan_all@_Container_base0@std@@QEAAXXZ) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: virtual __cdecl std::basic_ostream >::~basic_ostream >(void)" (??1?$basic_ostream@DU?$char_traits@D@std@@@std@@UEAA@XZ) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: __cdecl std::basic_ostream >::basic_ostream >(class std::basic_streambuf > *,bool)" (??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z) already defined in AttributesWriter.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "protected: void __cdecl std::basic_streambuf >::setg(char *,char *,char *)" (?setg@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXPEAD00@Z) 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)" (?_Decref@facet@locale@std@@QEAAPEAV123@XZ) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "private: static class std::locale::_Locimp * __cdecl std::locale::_Getgloballocale(void)" (?_Getgloballocale@locale@std@@CAPEAV_Locimp@12@XZ) already defined in libcpmt.lib(locale0.obj)
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "protected: void __cdecl std::basic_streambuf >::_Init(void)" (?_Init@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXXZ) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: __cdecl std::_Lockit::~_Lockit(void)" (??1_Lockit@std@@QEAA@XZ) already defined in libcpmt.lib(xlock.obj)
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: void __cdecl std::locale::facet::_Incref(void)" (?_Incref@facet@locale@std@@QEAAXXZ) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: __cdecl std::locale::id::operator unsigned __int64(void)" (??Bid@locale@std@@QEAA_KXZ) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: __cdecl std::_Lockit::_Lockit(int)" (??0_Lockit@std@@QEAA@H@Z) already defined in libcpmt.lib(xlock.obj)
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: void __cdecl std::basic_ios >::clear(int,bool)" (?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXH_N@Z) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: virtual __cdecl std::basic_istream >::~basic_istream >(void)" (??1?$basic_istream@DU?$char_traits@D@std@@@std@@UEAA@XZ) already defined in AbcExport.obj
2>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: __cdecl std::basic_istream >::basic_istream >(class std::basic_streambuf > *,bool)" (??0?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z) 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 &)" (??0exception@std@@QEAA@AEBQEBD@Z) already defined in LIBCMT.lib(stdexcpt.obj)
2>MSVCRT.lib(MSVCR100.dll) : error LNK2005: "public: virtual __cdecl std::exception::~exception(void)" (??1exception@std@@UEAA@XZ) already defined in LIBCMT.lib(stdexcpt.obj)
2>MSVCRT.lib(MSVCR100.dll) : error LNK2005: "public: __cdecl std::exception::exception(class std::exception const &)" (??0exception@std@@QEAA@AEBV01@@Z) already defined in LIBCMT.lib(stdexcpt.obj)
2>MSVCRT.lib(MSVCR100.dll) : error LNK2005: "public: __cdecl std::exception::exception(void)" (??0exception@std@@QEAA@XZ) 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 " (??8type_info@@QEBA_NAEBV0@@Z) already defined in LIBCMT.lib(typinfo.obj)
2>MSVCRT.lib(MSVCR100.dll) : error LNK2005: "public: __cdecl std::bad_cast::bad_cast(char const *)" (??0bad_cast@std@@QEAA@PEBD@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 &)" (??0type_info@@AEAA@AEBV0@@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 &)" (??4type_info@@AEAAAEAV0@AEBV0@@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 ==========

Odnośnik do komentarza
Udostępnij na innych stronach

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)

Edytowane przez Kroopson
Odnośnik do komentarza
Udostępnij na innych stronach

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 ?

Odnośnik do komentarza
Udostępnij na innych stronach

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.

Odnośnik do komentarza
Udostępnij na innych stronach

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

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się



×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Wykorzystujemy cookies. Przeczytaj więcej Polityka prywatności