gds
gds

Reputation: 13

how to build a linux-based program for window?

I want to build a inux-based program fully standalone for windows. And I try to use mingw64 on ubuntu with the command

./configure --host=x86_64-w64-mingw32 --disable-shared --enable-static LDFLAGS="-L /usr/local/lib/"
make

But it failed with

src/libcork/posix/subprocess.c:14:24: fatal error: sys/select.h: No such file or directory
 #include <sys/select.h>
                        ^
compilation terminated.

Here is the source code in github: https://github.com/shadowsocks/simple-obfs

So how can I build the program fully standalone for windows? May I try the cygwin or msys2?

update:

I find another source code which has been ported. But when I compiled it with

./configure --host=x86_64-w64-mingw32 CFLAGS="-static" LDFLAGS="-static"

I get an executable file which still needs the libssp-0.dll.

So how can I make the libssp be static linked?

Here is the new source code: https://github.com/Windendless/simple-obfs

Upvotes: 1

Views: 127

Answers (1)

Kevin Boone
Kevin Boone

Reputation: 4307

I don't think that the functionality in select.h is available on the MinGW version of gcc, because it is not available in the Windows platform. If you're building something that was intended to be built on Windows, then you might find that there are options you can pass to configure that enable a different, Windows-friendly way of achieving the same thing. If you're building something that was only really intended to be used on Linux, then you might be out of luck. In that case, your choices really amount to:

  1. Modify the code so it doesn't require select.h. Some of that functionality might already exist in the Windows Sockets API, with a somewhat different implementation. However, it might equally well not, in which case you'll have to do some work.

  2. Use a Windows compatibility layer that is more feature-rich than MinGW. Cygwin might well work, as might the Windows Subsystem for Linux in Windows 10. However, none of these approaches amounts to building a "standalone" application, because they require some supporting infrastructure.

Upvotes: 1

Related Questions