Toon posts:

[Matlab] Problemen met C++ integratie *

Pagina: 1
Acties:

Verwijderd

Topicstarter
He,

Ik loop tegen het volgende probleem aan:

Ik wil een project uit Visual C++ compileren voor matlab zodat ik via de mexFuntion vanuit matlab het C++ programma kan aanroepen.

De zooi is al gecompileerd enzo en klaar voor gebruik, maar ik moet iets ongeveer gelijks maken, dus dacht ik ik compileer eerst dit project zodat ik weet hoe dat in matlab gaat. (matlab newbie)
zie:
http://www.mathworks.com/...ctId=4017&objectType=file

Er staat een link bij naar de source die ik dus heb. Je moet er trouwens ook de portaudio sdk en asio sdk voor hebben.

In Visual C++ compiled die perfect, alleen komt er een dll uit die niet geschikt is voor matlab. (geen mexfile dus) Ik moet de troep dus in matlab compileren. dat doe ik met de regel:

mex -v -I'D:\Temp\portaudio_v18_1\pa_common' -I'D:\Temp\portaudio_v18_1\pa_asio' -I'D:\Temp\ASIO\asiosdk2\asiosdk2\common' -I'D:\Temp\ASIO\asiosdk2\asiosdk2\host' -I'D:\Temp\ASIO\asiosdk2\asiosdk2\host\pc' D:\Temp\pawavplay\pawavplay.cpp D:\Temp\portaudio_v18_1\pa_common\pa_lib.c D:\Temp\portaudio_v18_1\pa_asio\pa_asio.cpp D:\Temp\ASIO\asiosdk2\asiosdk2\common\asio.cpp D:\Temp\ASIO\asiosdk2\asiosdk2\host\pc\asiolist.cpp

Het zijn allemaal c-files die meegecompileerd moeten worden om link error2001 (unresolved external symbol) te voorkomen. Dat is dus gelukt maar het gaat volgens mij fout op het volgende punt:

er staat in de code:

#if MAC
#include "CodeFragments.hpp"

hier mag ie dus nooit om vragen, wat ie uiteraard wel doet. Maar in Visual c++ vraagt ie er niet om. Als ik het pad waar de file instaat meegeef krijg ik gruwelijke errors. Maar ik kan slechts overal in de code die #if MAC weg gaan halen...

Iemand enig idee?

p.s. zit ik in het goede topic?

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-05 16:53
Meestal kun je met een optie zeggen dat een MACRO ge-undeffed wordt.

Bij de MS compiler is dit /U <macro naam>

[ Voor 26% gewijzigd door farlane op 11-02-2004 13:57 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Verwijderd

Topicstarter
Ja dat is wel mogelijk...

-U<name>
Remove any initial definition of the C preprocessor symbol <name>.
(Inverse of the -D option.)

Zoals je al zei.

Maar wat heb ik hier precies aan? Ik hij gaat dat de tekst #if als het ware deleten. Dus dan include hij de macintosh files + de andere platform bestanden al helemaal toch...

Verwijderd

Topicstarter
goed het is weer eens opgelost, het heeft me wel +- de hele dag geko(t)st.

Het volgende commando in matlab deed alles perfect:

mex -D'WIN32' -D'DEBUG' -D'_WINDOWS' -D'_MBCS' -D'_USRDLL' -D'PAWAVPLAYASIO_EXPORTS' -I'D:\Temp\portaudio_v18_1\pa_common\' -I'D:\Temp\portaudio_v18_1\pa_asio\' -I'D:\Temp\asiosdk2\common\' -I'D:\Temp\asiosdk2\host\' -I'D:\Temp\asiosdk2\host\mac\' -I'D:\Temp\asiosdk2\host\pc\' D:\Temp\pawavplay\pawavplay.cpp D:\Temp\portaudio_v18_1\pa_common\pa_lib.c D:\Temp\portaudio_v18_1\pa_asio\pa_asio.cpp D:\Temp\asiosdk2\host\pc\asiolist.cpp D:\Temp\asiosdk2\host\asiodrivers.cpp D:\Temp\asiosdk2\common\asio.cpp D:\Temp\asiosdk2\common\asio.h kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libmx.lib libmex.lib libmatlb.lib libmat.lib winmm.lib

Hier wil je geen quotje in verkeerd hebben staan :D, dus eff een tekstfiletje van gefixed.

mzzls

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-05 16:53
Verwijderd schreef op 11 februari 2004 @ 13:59:
Ja dat is wel mogelijk...

-U<name>
Remove any initial definition of the C preprocessor symbol <name>.
(Inverse of the -D option.)

Zoals je al zei.

Maar wat heb ik hier precies aan? Ik hij gaat dat de tekst #if als het ware deleten. Dus dan include hij de macintosh files + de andere platform bestanden al helemaal toch...
Je kunt dan dus doen -U MAC doen, dan undeffed ie die MAC macro, en skipped hij wat tussen #if MAC #endif staat ( Wat ie waarschijnlij ook doet als je -D WINDOWS doet )

Misschien is he een idee om wat kennis van de compiler/precompiler op te doen

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.