Hello,
I'm having a hard time compiling bfgminer under Windows x86 and x64 environments with MinGW 4.8.1.
There are a few things that are now a bit outdated in bfgminer git's windows build instructions. But anyway, here's what is going on:
1. mingw-get-inst-xxxxxxxx.exe is no longer maintained, although you can still get a copy from different places on the net.
The new version is
mingw-get-setup.exe, which I personally find worst than the previous installer, minor detail anyway, I still went ahead and installed exactly as instructed, through
mingw-get-inst-20120426.exe.
2. From there on, I followed every step of the instructions without a hitch... until bfgminer compilation itself.
3. Next step:
CFLAGS="-O2 -msse2" ./configure
outputs these errors as a result:
checking for pthread_cancel... no
checking for pthread_create... no
configure: error: Could not find pthread library - please install libpthread
4. Now, getting
pthread installed in MinGW... (not mentioned in the current build instructions)
mingw-get install pthreads
OK, this does the trick and the configuration is now able to proceed.
5. Now onto making...
make
...returns several errors related to missing header files.
In the 10+ times I tried compiling this program, under several builds of Windows, both x86 and x64, I have had this happen every time and not once is it mentioned in the build instructions, maybe something changed in the code since then, I don't know. Example:
miner.h:31:22: fatal error: blkmaker.h: No such file or directory
#include
blkmaker.h is located under
bfgminer\libblkmaker, this is getting weirder by the second.
6. At this point I start adding libraries to the make command:
make CFLAGS="-Ilibblkmaker"
Despite that, it still gives me the finger a few steps bellow:
CCLD bfgminer.exe
bfgminer-miner.o:miner.c:(.text+0x1755d): undefined reference to `llround'
bfgminer-fpgautils.o:fpgautils.c:(.text+0x2ab8): undefined reference to `lowl_usb_attach_kernel_driver'
bfgminer-fpgautils.o:fpgautils.c:(.text+0x2bc4): undefined reference to `lowl_usb_attach_kernel_driver'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: bfgminer-fpgautils.o: bad reloc address 0x0 in section `.data'
collect2.exe: error: ld returned 1 exit status
make[2]: *** [bfgminer.exe] Error 1
make[2]: Leaving directory `/home/Administrator/bfgminer'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/Administrator/bfgminer'
make: *** [all] Error 2
7. The build instructions mentioned
libusb as optional, but it seems is now mandatory.
After installing
libusb, I get another missing header file:
lowl-vcom.c:53:22: fatal error: usbioctl.h: No such file or directory
#include
8. The only places in my
MinGW installation where
usbioctl.h is present are:
- C:\MinGW\include\ddk
- C:\MinGW\mingw32\include\ddk
Since
usbioctl.h in both of those folders is identical, I tried including one of their destinations in
CFLAGS:
make CFLAGS="-Ilibblkmaker -IC:/MinGW/include/ddk"
...which unfortunately breaks on me once again:
CC bfgminer-lowl-usb.o
In file included from util.h:47:0,
from logging.h:33,
from miner.h:42,
from deviceapi.h:10,
from fpgautils.h:13,
from lowl-usb.c:20:
c:\mingw\include\ws2tcpip.h:38:2: error: #error "ws2tcpip.h is not compatible with winsock.h. Include winsock2.h instead."
#error "ws2tcpip.h is not compatible with winsock.h. Include winsock2.h instead."
^
In file included from util.h:47:0,
from logging.h:33,
from miner.h:42,
from deviceapi.h:10,
from fpgautils.h:13,
from lowl-usb.c:20:
c:\mingw\include\ws2tcpip.h:147:8: error: redefinition of 'struct ip_mreq'
struct ip_mreq {
^
In file included from c:\mingw\include\windows.h:93:0,
from C:/MinGW/include/libusb-1.0/libusb.h:62,
from lowl-usb.c:18:
c:\mingw\include\winsock.h:315:8: note: originally defined here
struct ip_mreq {
^
In file included from util.h:47:0,
from logging.h:33,
from miner.h:42,
from deviceapi.h:10,
from fpgautils.h:13,
from lowl-usb.c:20:
c:\mingw\include\ws2tcpip.h:390:13: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'freeaddrinfo'
void WSAAPI freeaddrinfo (struct addrinfo*);
^
c:\mingw\include\ws2tcpip.h:391:12: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'getaddrinfo'
int WSAAPI getaddrinfo (const char*,const char*,const struct addrinfo*,
^
c:\mingw\include\ws2tcpip.h:393:12: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'getnameinfo'
int WSAAPI getnameinfo(const struct sockaddr*,socklen_t,char*,DWORD,
^
make[2]: *** [bfgminer-lowl-usb.o] Error 1
make[2]: Leaving directory `/home/Administrator/bfgminer'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/Administrator/bfgminer'
make: *** [all] Error 2
I'm at loss here...
I followed the steps in the build instruction flawlessly and even got
pthread libraries installed but I can't seem to compile it.
If anyone has any ideas about why this won't compile, I'm all ears!
Thanks.