简体   繁体   中英

Adding ogg vorbis encoding to my project

For my MFC application, I need to convert .wav data in an array into ogg vorbis format.

I compiled both libogg and libvorbis as static libraries. I created "bin" directory in my project folder and placed there libvorbis_static.lib and libvorbisfile_static.lib. Also, I created in the bin directory libvorbis folder, and an include folder in it, and placed there vorbis (with codec.h, vorbisfile.h, vorbisenc.h) and ogg (with os_types.h and ogg.h) folders. I added libvorbis_static.lib to additional dependencies of my project and the bin folder to Additional Library Directories.

When I am trying to compile, I get errors:

1>libvorbis_static.lib(info.obj) : MSIL .netmodule or module compiled with /GL found; restarting link with /LTCG; add /LTCG to the link command line to improve linker performance

1>LINK : warning LNK4075: ignoring '/INCREMENTAL' due to '/LTCG' specification

1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _free already defined in libcmtd.lib(dbgfree.obj)

1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _calloc already defined in libcmtd.lib(dbgcalloc.obj)

1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _malloc already defined in libcmtd.lib(dbgmalloc.obj)

1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _realloc already defined in libcmtd.lib(dbgrealloc.obj)

1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _memmove already defined in libcmtd.lib(memmove.obj)

1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _ldexp already defined in libcmtd.lib(_ldexp_.obj)

1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _qsort already defined in libcmtd.lib(qsort.obj)

1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _ceil already defined in libcmtd.lib(_ceil_pentium4_.obj)

1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _exit already defined in libcmtd.lib(crt0dat.obj)

1>MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) already defined in libcmtd.lib(typinfo.obj)

1>MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) already defined in libcmtd.lib(typinfo.obj)

1>LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library

1>BookDoc.obj : error LNK2001: unresolved external symbol _ogg_stream_clear

1>BookDoc.obj : error LNK2001: unresolved external symbol _ogg_page_eos

1>BookDoc.obj : error LNK2001: unresolved external symbol _ogg_stream_pageout

1>BookDoc.obj : error LNK2001: unresolved external symbol _ogg_stream_flush

1>BookDoc.obj : error LNK2001: unresolved external symbol _ogg_stream_packetin

1>BookDoc.obj : error LNK2001: unresolved external symbol _ogg_stream_init

1>libvorbis_static.lib(info.obj) : error LNK2001: unresolved external symbol _oggpack_readinit

1>libvorbis_static.lib(info.obj) : error LNK2001: unresolved external symbol _oggpack_bytes

1>libvorbis_static.lib(info.obj) : error LNK2001: unresolved external symbol _oggpack_writeclear

1>libvorbis_static.lib(info.obj) : error LNK2001: unresolved external symbol _oggpack_read

1>libvorbis_static.lib(info.obj) : error LNK2001: unresolved external symbol _oggpack_reset

1>libvorbis_static.lib(info.obj) : error LNK2001: unresolved external symbol _oggpack_write

1>libvorbis_static.lib(info.obj) : error LNK2001: unresolved external symbol _oggpack_writeinit

1>libvorbis_static.lib(bitrate.obj) : error LNK2001: unresolved external symbol _oggpack_writetrunc

1>libvorbis_static.lib(bitrate.obj) : error LNK2001: unresolved external symbol _oggpack_get_buffer

1>libvorbis_static.lib(codebook.obj) : error LNK2001: unresolved external symbol _oggpack_adv

1>libvorbis_static.lib(codebook.obj) : error LNK2001: unresolved external symbol _oggpack_look

1>.\Debug/Book.exe : fatal error LNK1120: 17 unresolved externals

I am confused. Could you please help? Thanks.

LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library

It's nothing to do with orbis, this is what you get when you try and link both the c stdlib and MFC's C stdlib in the same program - just do what the compiler tells you. Or just set it to ignore libcmt/d

Check what c-runtime you compiled ogg-vorbis with. It must match your app if you're linking statically.

If you've compiled vorbis to a DLL instead, you might be able to use separate c-runtimes (if memory allocated by the vorbis DLL is always freed by that DLL, and it's a c-only API).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM