I've copy fmodex.h, fmodexerr.h, libfmodex.a and fmodex.dll to the directory the script run. Anduse strict; use warnings; use Inline C => Config => CC => 'gcc'; use Inline C => Config => INC => '-I.'; use Inline C => Config => LD => 'ld'; use Inline C => Config => LIBS => '-L. -lfmodex'; use Inline C => << 'TEST'; #include <windows.h> #include <stdio.h> #include <conio.h> #include "fmod.h" #include "fmod_errors.h" void ERRCHECK(FMOD_RESULT result) { if (result != FMOD_OK) { printf("FMOD error! (%d) %s\n", result, FMOD_ErrorString(resul +t)); exit(-1); } } int main() { FMOD_SYSTEM *system; FMOD_SOUND *sound; FMOD_CHANNEL *channel = 0; FMOD_RESULT result; int key; unsigned int version; /* Create a System object and initialize. */ result = FMOD_System_Create(&system); ERRCHECK(result); result = FMOD_System_GetVersion(system, &version); ERRCHECK(result); if (version < FMOD_VERSION) { printf("Error! You are using an old version of FMOD %08x. Th +is program requires %08x\n", version, FMOD_VERSION); return 0; } result = FMOD_System_Init(system, 1, FMOD_INIT_NORMAL, NULL); ERRCHECK(result); result = FMOD_System_CreateStream(system, "wave.mp3", FMOD_HARDWAR +E | FMOD_LOOP_NORMAL | FMOD_2D, 0, &sound); ERRCHECK(result); printf("========================================================== +==========\n"); printf("PlayStream Example. Copyright (c) Firelight Technologies +2004-2008.\n"); printf("========================================================== +==========\n"); printf("\n"); printf("Press space to pause, Esc to quit\n"); printf("\n"); /* Play the sound. */ result = FMOD_System_PlaySound(system, FMOD_CHANNEL_FREE, sound, 0 +, &channel); ERRCHECK(result); /* Main loop. */ do { if (kbhit()) { key = getch(); switch (key) { case ' ' : { int paused; FMOD_Channel_GetPaused(channel, &paused); FMOD_Channel_SetPaused(channel, !paused); break; } } } FMOD_System_Update(system); if (channel) { unsigned int ms; unsigned int lenms; int playing; int paused; result = FMOD_Channel_IsPlaying(channel, &playing); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HAN +DLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } result = FMOD_Channel_GetPaused(channel, &paused); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HAN +DLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } result = FMOD_Channel_GetPosition(channel, &ms, FMOD_TIMEU +NIT_MS); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HAN +DLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } result = FMOD_Sound_GetLength(sound, &lenms, FMOD_TIMEUNIT +_MS); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HAN +DLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } printf("Time %02d:%02d:%02d/%02d:%02d:%02d : %s\r", ms / 1 +000 / 60, ms / 1000 % 60, ms / 10 % 100, lenms / 1000 / 60, lenms / 1 +000 % 60, lenms / 10 % 100, paused ? "Paused " : playing ? "Playing" +: "Stopped"); } Sleep(10); } while (key != 27); printf("\n"); /* Shut down */ result = FMOD_Sound_Release(sound); ERRCHECK(result); result = FMOD_System_Close(system); ERRCHECK(result); result = FMOD_System_Release(system); ERRCHECK(result); return 0; } TEST main();
Dev-C++, MinGW and CygWin users - libfmodex.a.
AS fmod help file mentioned above, my LIBS config isstrangely, perl throw below error:use Inline C => Config => LIBS => '-L. -lfmodex'; not use Inline C => Config => LIBS => '-L. -lfmodex_vc';
|| || Microsoft (R) Program Maintenance Utility Version 1.50 || Copyright (c) Microsoft Corp 1988-94. All rights reserved. || || C:\Perl\bin\perl.exe C:\Perl\lib\ExtUtils\xsubpp -typemap C:\P +erl\lib\ExtUtils\typemap test_pl_0ca9.xs > test_pl_0ca9.xsc && C:\Pe +rl\bin\perl.exe -MExtUtils::Command -e mv test_pl_0ca9.xsc test_pl_0c +a9.c || gcc -c -IC:/test -DNDEBUG -DWIN32 -D_CONSOLE -DNO_STRICT -DHA +VE_DES_FCRYPT -DUSE_SITECUSTOMIZE -DPRIVLIB_LAST_IN_INC -DPERL_IMPLIC +IT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -DPERL_MSVCRT_READFIX -DH +ASATTRIBUTE -fno-strict-aliasing -mms-bitfields -O2 -DVERSION=\"0. +00\" -DXS_VERSION=\"0.00\" "-IC:\Perl\lib\CORE" test_pl_0ca9.c || Running Mkbootstrap for test_pl_0ca9 () || C:\Perl\bin\perl.exe -MExtUtils::Command -e chmod 644 test_pl_0 +ca9.bs || C:\Perl\bin\perl.exe -MExtUtils::Mksymlists -e "Mksymlists('NA +ME'=>\"test_pl_0ca9\", 'DLBASE' => 'test_pl_0ca9', 'DL_FUNCS' => { } +, 'FUNCLIST' => [], 'IMPORTS' => { }, 'DL_VARS' => []);" || Set up gcc environment - 3.4.5 (mingw special) || dlltool --def test_pl_0ca9.def --output-exp dll.exp || g++ -o blib\arch\auto\test_pl_0ca9\test_pl_0ca9.dll -Wl,--base- +file -Wl,dll.base -mdll -L"C:\Perl\lib\CORE" test_pl_0ca9.o -Wl,--ima +ge-base,0x2b150000 C:\Perl\lib\CORE\perl510.lib C:\MinGW\lib\libkern +el32.a C:\MinGW\lib\libuser32.a C:\MinGW\lib\libgdi32.a C:\MinGW\lib\ +libwinspool.a C:\MinGW\lib\libcomdlg32.a C:\MinGW\lib\libadvapi32.a C +:\MinGW\lib\libshell32.a C:\MinGW\lib\libole32.a C:\MinGW\lib\libolea +ut32.a C:\MinGW\lib\libnetapi32.a C:\MinGW\lib\libuuid.a C:\MinGW\lib +\libws2_32.a C:\MinGW\lib\libmpr.a C:\MinGW\lib\libwinmm.a C:\MinGW\l +ib\libversion.a C:\MinGW\lib\libodbc32.a C:\MinGW\lib\libodbccp32.a C +:\MinGW\lib\libmsvcrt.a dll.exp || test_pl_0ca9.o:test_pl_0ca9.c:(.text+0x3f9): undefined reference to + `FMOD_System_Create@4' || test_pl_0ca9.o:test_pl_0ca9.c:(.text+0x416): undefined reference to + `FMOD_System_GetVersion@8' || test_pl_0ca9.o:test_pl_0ca9.c:(.text+0x473): undefined reference to + `FMOD_System_Init@16' || test_pl_0ca9.o:test_pl_0ca9.c:(.text+0x4a8): undefined reference to + `FMOD_System_CreateStream@20' || test_pl_0ca9.o:test_pl_0ca9.c:(.text+0x523): undefined reference to + `FMOD_System_PlaySound@20' || test_pl_0ca9.o:test_pl_0ca9.c:(.text+0x53b): undefined reference to + `FMOD_System_Update@4' || test_pl_0ca9.o:test_pl_0ca9.c:(.text+0x584): undefined reference to + `FMOD_Channel_GetPaused@8' || test_pl_0ca9.o:test_pl_0ca9.c:(.text+0x59f): undefined reference to + `FMOD_Channel_SetPaused@8' || test_pl_0ca9.o:test_pl_0ca9.c:(.text+0x5ad): undefined reference to + `FMOD_System_Update@4' || test_pl_0ca9.o:test_pl_0ca9.c:(.text+0x5cb): undefined reference to + `FMOD_Channel_IsPlaying@8' || test_pl_0ca9.o:test_pl_0ca9.c:(.text+0x60e): undefined reference to + `FMOD_Channel_GetPaused@8' || test_pl_0ca9.o:test_pl_0ca9.c:(.text+0x657): undefined reference to + `FMOD_Channel_GetPosition@12' || test_pl_0ca9.o:test_pl_0ca9.c:(.text+0x697): undefined reference to + `FMOD_Sound_GetLength@12' || test_pl_0ca9.o:test_pl_0ca9.c:(.text+0x7e3): undefined reference to + `FMOD_Sound_Release@4' || test_pl_0ca9.o:test_pl_0ca9.c:(.text+0x7f9): undefined reference to + `FMOD_System_Close@4' || test_pl_0ca9.o:test_pl_0ca9.c:(.text+0x80f): undefined reference to + `FMOD_System_Release@4' || collect2: ld returned 1 exit status || NMAKE : fatal error U1077: 'C:\WINDOWS\system32\cmd.exe' : return c +ode '0x1' || Stop. || || A problem was encountered while attempting to compile and install y +our Inline || C code. The command that failed was: || nmake > out.make 2>&1 || || The build directory was: || C:\test\_Inline\build\test_pl_0ca9 || || To debug the problem, cd to the build directory, and inspect the ou +tput files. || || at C:\test\test.pl line 28 test.pl|167| BEGIN failed--compilation aborted
In reply to Inline::C with minGW? by xiaoyafeng
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |