Menu

compile

Anonymous Geza Kovacs

Building a Dynamically Linked Version

Dynamically linked builds are most useful for packaging into Linux distributions. If you are attempting to build a standalone version for deployment on Windows, go to the statically linked section. If you are attempting to build a standalone version for deployment on Mac OS X, go to the Mac OS X section.

Prerequisites

Latest tarball at http://unetbootin.sourceforge.net/unetbootin-source-latest.tar.gz
libqt4-dev
g++

Instructions

1. Extract the tarball and cd to it

2. Run the following commands:

lupdate-qt4 unetbootin.pro
lrelease-qt4 unetbootin.pro
qmake-qt4
make

(Note that if you are instead building from git or bzr or the source .zip file, you will need to instead use the following):

sed -i '/^RESOURCES/d' unetbootin.pro
lupdate-qt4 unetbootin.pro
lrelease-qt4 unetbootin.pro
qmake-qt4 "DEFINES += NOSTATIC" "RESOURCES -= unetbootin.qrc"
make

3. A dynamically linked executable which you can package will then be generated at "unetbootin"

4. If building a package, place the unetbootin_*.qm files (which were generated from the .ts files when lrelease-qt4 was run) in the /usr/share/unetbootin/ directory to enable the usage of localization.

5. If building a package, add "syslinux", "p7zip-full", "libqt4-core" (libQtCore.so.4), "libqt4-gui" (libQtGui.so.4), and "libqt4-network" (libQtNetwork.so.4) as dependencies.

Building a Statically Linked Version

Statically linked builds are most useful for standalone deployment, not packaging. They are the type that is available for download on the website.

Build System

I build on Fedora 10 and Ubuntu 8.04 with g++ and mingw32, though it should work on other distributions as well.

Prerequisites

Latest source zip package at http://unetbootin.sourceforge.net/unetbootin-source-latest.zip
libqt4-dev
mingw32 (Fedora users see http://www.annexia.org/tmp/mingw/ for RPM packages)
g++

Instructions (Simple)

These instructions use pre-compiled versions of static Qt4 for Windows and Linux. If you'd like to build statically linked versions of Qt4 yourself, use the manual instructions instead.

1. Go to http://launchpad.net/unetbootin/+download and download these files:

For Mac OS X: qt4.8.7-mac-x86.tar.xz https://launchpad.net/unetbootin/trunk/trunk/+download/qt4.8.7-mac-x86.tar.xz

For Windows: qt4-win.7z http://launchpad.net/unetbootin/trunk/trunk/+download/qt4-win.7z

For Linux: qt4-x11-glibc23.7z http://launchpad.net/unetbootin/trunk/trunk/+download/qt4-x11-glibc23.7z

2. Extract those files using 7-zip http://www.7-zip.org/ or p7zip-full on Linux, to get the directories "qt4-win" and "qt4-x11"

3. Move the qt4-win and qt4-x11 directories into the UNetbootin build directory (the same directory containing the files unetbootin.cpp and unetbootin.pro, which is src/unetbootin in the git repository.

4. cd to the UNetbootin build directory, and run the script "./build"

5. Statically linked UNetbootin binaries should be generated in the release subdirectory.

Instructions (Manual)

1) Build a statically linked Qt4 for Windows (instructions from http://doc.trolltech.com/4.3/deployment-windows.html#static-linking and http://qtnode.net/wiki?title=Building_static )

cd C:\Qt4
configure -static
make sub-src

2) Set up cross-compile environment (instructions from http://gentoo-wiki.com/HOWTO_MinGW_and_Qt4 )

If cross-compiling on Ubuntu, simply copy the file qmake.conf to /usr/share/qt4/mkspecs/win32-g++/qmake.conf

3) Copy over your statically linked Windows qt4 install directory to /usr/i586-mingw32msvc/Qt/

4) Go to the directory containing the source files (unetbootin.cpp, main.cpp, unetbootin.pro, etc.), and run "./build" to automate steps 4 and 5, or to do it manually, run the following commands:

qmake -spec win32-g++ "DEFINES += STATICWINDOWS" "RESOURCES += unetbootin-windows.qrc unetbootin-sevnz.qrc" "RC_FILE += ubnembed.rc" "QMAKE_LFLAGS += -Wl,-subsystem,windows"

make

5) You should now have a Windows .exe file at release/unetbootin.exe

To reduce file size, compress the executable using upx ( http://upx.sourceforge.net/ )

./upx --lzma ./unetbootin.exe

Instructions (Microsoft Visual C++ 2005)

You can also use Microsoft Visual C++ 2005 as your compiler to reduce executable size for Windows. In that case, download and use:

qt4.5.1-static-msvc2005-release-minimal.7z http://gkovacs.xvm.mit.edu/qt4.5.1-static-msvc2005-release-minimal.7z

To build, extract the file to C:\Qt\qt4-msvc2005, cd to the unetbootin source directory, open the Visual Studio 2005 command line and enter the following commands:

set QTDIR=c:\Qt\qt4-msvc2005
set PATH=%PATH%;c:\Qt\qt4-msvc2005\bin
set QMAKESPEC=win32-msvc2005
qmake "DEFINES += STATICWINDOWS" "RESOURCES += unetbootin-windows.qrc unetbootin-sevnz.qrc" "RC_FILE += ubnembed.rc"
nmake
upx --lzma release\unetbootin.exe

For more information see Compiling Qt Projects with Microsoft Visual C++

Instructions (Mac OS X)

Download and install XCode, and install the XCode Command Line Tools from there.

Next download qt4.8.7-mac-x86.tar.xz https://launchpad.net/unetbootin/trunk/trunk/+download/qt4.8.7-mac-x86.tar.xz

Extract qt4.8.7-mac-x86.tar.xz using The Unarchiver, to get the directory qt4-mac. Then move the qt4-mac folder into the src/unetbootin directory (same one containing unetbootin.pro)

Then go to the src/unetbootin directory and run ./build-mac

Troubleshooting

If you run into errors while running qmake or other qt build commands, make sure you're using the qt4 version not the qt3 one by adding -qt4 to the end of the commands (qmake-qt4). You can check the version by running "qmake --version".

If you get mingw errors relating to "qatomic-windows.h" or "InterlockedCompareExchange" open the file src/corelib/arch/qatomic_windows.h find this section and add the declarations:

extern "C" {
#ifndef __INTERLOCKED_DECLARED
#define __INTERLOCKED_DECLARED
    __declspec(dllimport) long __stdcall InterlockedCompareExchange(long *, long, long);
    __declspec(dllimport) long __stdcall InterlockedIncrement(long *);
    __declspec(dllimport) long __stdcall InterlockedDecrement(long *);
    __declspec(dllimport) long __stdcall InterlockedExchange(long *, long);
    __declspec(dllimport) long __stdcall InterlockedExchangeAdd(long *, long);
#endif
}

See Also

Development Guide
Building a Custom UNetbootin Version
Building a UNetbootin Plugin
List of Custom UNetbootin Versions and Plugins (publicly editable)


Related

Wiki: Home
Wiki: buildcustomversion
Wiki: createplugin
Wiki: devdocs
Wiki: development
Wiki: listcustomversion
Wiki: msvc
Wiki: public

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.