Pelles C forum

C language => Tips & tricks => Topic started by: TimoVJL on April 08, 2014, 07:31:25 AM

Title: mingw64 headers
Post by: TimoVJL on April 08, 2014, 07:31:25 AM
mingw-w64 headers and libs are here (http://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-snapshot/)
Quote
/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the w64 mingw-runtime package.
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 */
def-files for import libraries are in folder mingw-w64-crt\lib32\ or mingw-w64-crt\lib64\
leading undescore is missing in 32-bit  def-files.

Addition to end of _mingw.h
Code: [Select]
#ifdef __POCC__
 #ifdef _WIN64
  #define __x86_64__
  #define _AMD64_
  #define __unaligned
 #else
  #define __i386__
  #define _X86_
 #endif
 #include <wchar.h>
 #include <intrin.h>
 #define __buildmemorybarrier() {unsigned char Barrier;__asm {}};
#endif /* __POCC__ */
__buildmemorybarrier() is still broken.
32 bit def-files need to modify.
Helper program here:
Code: [Select]
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <io.h>

int main(int argc, char **argv)
{
FILE *fi, *fo;
char buf[4096];

if (argc < 2)
{
printf("Usage:\n%s file\n", argv[0]);
return 1;
}

struct _finddata_t info;
intptr_t hf;
if ((hf = _findfirst(argv[1], &info)) != -1)
{
do
{
strcpy(buf, info.name);
strcat(buf, ".bak");
rename(info.name, buf);
if ((fi = fopen(buf, "r")) == NULL)
//if ((fi = fopen(info.name, "r")) == NULL)
{
fprintf(stderr, "can't open file '%s'\n", argv[1]);
return 1;
}
int iExp = 0;
//fo = stdout;
fo = fopen(info.name, "wt");
while (fgets(buf, sizeof(buf), fi))
{
if (!iExp && !strncmp(buf, "EXPORTS", 5))
{
iExp = 1;
fputs(buf, fo);
}
else
{
if (iExp && buf[0] != ';' && strchr(buf, '@')) // only stdcall
fputs("_", fo);
fputs(buf, fo);
}
}
if (fo != stdout)
fclose(fo);
fclose(fi);
} while (_findnext(hf, &info) == 0);
_findclose(hf);
}
return 0;
}
Title: Re: mingw64 headers
Post by: CommonTater on April 08, 2014, 10:28:22 AM
mingw-w64 headers and libs are here (http://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-snapshot/)
Quote
/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the w64 mingw-runtime package.
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 */

Yes, they're in the public domain... but do they work?
 
MinGW and GCC use a lib format that I don't believe POLINK knows how to read.  But if the headers are useable, maybe we can do something to transform the libs.  Vortex has quite a few tools for this kind of thing, maybe he can help...
 
Title: Re: mingw64 headers
Post by: Vortex on April 08, 2014, 09:05:21 PM
Hi TimoVJL,

Polink will display a lot of error messages if you try use directly the MinGW import libraries. My method is to build module definition files from MinGW libraries and convert the .def files to MS COFF import libraries :

Code: [Select]
lib2def libkernel32.a
lib2def libuser32.a

type libkernel32.def | minised s/libkernel32/kernel32/ > kernel32.def
type libuser32.def | minised s/libuser32/user32/ > user32.def

\PellesC\Bin\polib.exe /OUT:kernel32a.lib /DEF:kernel32.def /MACHINE:x86
\PellesC\Bin\polib.exe /OUT:user32a.lib /DEF:user32.def /MACHINE:x86

MiniSed for Windows :

http://gnuwin32.sourceforge.net/packages/minised.htm

MinGW import libraries from :

http://sourceforge.net/projects/orwelldevcpp/files/

Dev-Cpp 5.6.2 MinGW 4.8.1 Portable.7z

The attached zip file contains a simple 32-bit Pelles C project built from the regenerated libraries.