tinycc-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Tinycc-devel] Crosscompiling


From: Markus Bergholz
Subject: Re: [Tinycc-devel] Crosscompiling
Date: Sun, 29 Jun 2014 20:01:04 +0200




On Sat, Jun 28, 2014 at 6:44 PM, Michael Matz <address@hidden> wrote:


On Fri, 27 Jun 2014, Markus Bergholz wrote:

      Make it clear where “mexPrintf” is defined and why it is not
      effective.


"mexPrintf" is defined in /usr/include/octave-3.8.1/octave/mexproto.h afaiu.

That's a declaration, not a definition.  The definition comes from some Octave internal library.  On linux you can build shared libraries that contain references to undefined symbols (like 'mexPrintf') that will then be resolved when loading the library (Octave itself or some library it depends on will define that symbol).  That's what happens for your working example (your helloworld.mex will actually be an ELF shared library containing unresolved references to mexPrintf).

When you try the same for Windows you'll actually build a DLL.  When it's supposed to contain references to external symbols then you at least need a .def file that describes which library will provide that symbol later. You'll also need to generate a .lib file describing the symbols exported by your helloworld.mex (so that octave can load it).

Generally for Octave the right way to create .mex files seems to be to use the helper program/script mkoctfile (with --mex), which presumably contains all the right libraries and other link parameters for each platform.  If Octave supports external commands on Windows at all.

This all is not TCC specific, it's a problem in how you use Octaves system for C bindings.  You'll probably get better answers asking their developers.



Thanks for your long explanation!

After creating a .def file using tiny_imp M:\R2013b\bin\win64\libmex.dll I can compile it without any error or warning on Windows

tcc.exe mexample.c libmex.def -IM:\R2013\extern\include\ -shared -o mexample11.mexw64

and on Linux

x86_64-win32-tcc mexample.c libmex.def -I /usr/include/octave-3.8.1/octave/ -shared -o mexample10.mexw64

However, both end up with "Mex file entry point it missing".
Same for
tcc.exe mexample.c -IM:\R2013b\extern\include\ -shared -LM:\R2013b\bin\win64\ -lmex -o mexample12.mexw64

So I don't understand the library part for Windows systems...can you say a few more words about it?

Thanks in advanced,
Markus

reply via email to

[Prev in Thread] Current Thread [Next in Thread]