[Wine] Using Monodevelop to write Winelib apps

Charles Davis cdavis at mymail.mines.edu
Thu May 6 01:19:23 CDT 2010


On 5/6/10 12:01 AM, Progman3K wrote:
> Hi,
> 
> I'm using Monodevelop to write Win32-API applications.
> 
> I have no trouble getting the Monodevelop compiler (gcc/g++) to compile the code, but I am having problems getting the app to link:
> 
> g++ -shared -o "dtrace/bin/Debug/libdtrace.so" "dtrace/bin/Debug/main.o" "/usr/lib64/libwine.so"  
> dtrace/bin/Debug/main.o: In function `DllMain':
> dtrace/src/main.cpp:25: undefined reference to `InitializeCriticalSection'
> dtrace/src/main.cpp:41: undefined reference to `GlobalHandle'
> dtrace/src/main.cpp:41: undefined reference to `GlobalUnlock'
> dtrace/src/main.cpp:41: undefined reference to `GlobalHandle'
> dtrace/src/main.cpp:41: undefined reference to `GlobalFree'
> dtrace/src/main.cpp:48: undefined reference to `DeleteCriticalSection'
> /usr/lib/gcc/x86_64-pc-linux-gnu/4.4.3/../../../../x86_64-pc-linux-gnu/bin/ld: dtrace/bin/Debug/libdbgtrace.so: hidden symbol `LeaveCriticalSection' isn't defined
> /usr/lib/gcc/x86_64-pc-linux-gnu/4.4.3/../../../../x86_64-pc-linux-gnu/bin/ld: final link failed: Nonrepresentable section on output
> collect2: ld returned 1 exit status
> Build complete -- 40 errors, 13 warnings
> 
> My question is, where are the Win32 API functions located for the linker? What are their names? .a files? .so files?
Neither.

It's kinda weird actually. First you have to run winebuild on the object
files, so it can generate import stubs. Then you have to assemble (yes,
assemble) and link these stubs to your object files. This is because of
the way importing functions from Wine DLLs works (it's designed to be
compatible with Windows).

Luckily, you don't have to do all this by hand. The winegcc tool does
all this for you. So, you invoke wineg++ instead of plain g++. Also, you
have to tell it you want to link to kernel32.dll by passing it -lkernel32.

Hope that helps.

Chip



More information about the wine-users mailing list