Hello, I just tried compiling all of Wine with my patch series applied and, to my surprise, compilation failed. The reason was that IID_IResourceManager was already declared elsewhere. Now, according to this page: http://mikolajapp.appspot.com/uuid/query?q={56a868ac-0ad4-11ce-b03a-0020af0ba770} Wine's strmif.h declares IID_IResourceManager, while SDK declares __declspec(uuid) as IResourceManager. SDK declares IID_IResourceManager elsewhere: http://mikolajapp.appspot.com/uuid/query?q={03741d21-87eb-11ce-8081-0080c758527e} I'm new to COM, so I'm not sure what exactly is the difference between IID and declspec(uuid). Could anyone explain or suggest a fix? Thanks, Daniel
Additional info: after my patches amstream fails to link complaining about duplicate IID_IResourceManager: ~/wine-git/dlls/amstream$ make ../../tools/winegcc/winegcc -m32 -B../../tools/winebuild --sysroot=../.. -fasynchronous-unwind-tables -shared ./amstream.spec amstream.o audiodata.o main.o mediastream.o mediastreamfilter.o amstream_classes_r.res version.res -o amstream.dll.so -lstrmiids -lstrmbase -luuid -lole32 -ladvapi32 ../../libs/port/libwine_port.a ../../dlls/uuid/libuuid.a(uuid.o):(.rodata+0x540): multiple definition of `IID_IResourceManager' ../../dlls/strmiids/libstrmiids.a(strmiids.o):(.rodata+0x5e0): first defined here winebuild: /usr/bin/ld failed with status 1 winegcc: ../../tools/winebuild/winebuild failed if I don't add the DTC headers to uuid, linking xolehlp fails: ~/wine-git/dlls/xolehlp$ make ../../tools/winegcc/winegcc -m32 -B../../tools/winebuild --sysroot=../.. -fasynchronous-unwind-tables -shared ./xolehlp.spec xolehlp.o -o xolehlp.dll.so -luuid ../../libs/port/libwine_port.a xolehlp.o: In function `TransactionDispenser_QueryInterface': /home/daniel/wine-git/dlls/xolehlp/xolehlp.c:170: undefined reference to `IID_ITransactionDispenser' /usr/bin/ld: xolehlp.o: relocation R_386_GOTOFF against undefined hidden symbol `IID_ITransactionDispenser' can not be used when making a shared object /usr/bin/ld: final link failed: Bad value How do I know which dll should export these IIDs? 2013/5/2 Daniel Jeliński <djelinski1(a)gmail.com>
Hello, I just tried compiling all of Wine with my patch series applied and, to my surprise, compilation failed. The reason was that IID_IResourceManager was already declared elsewhere.
Now, according to this page:
http://mikolajapp.appspot.com/uuid/query?q={56a868ac-0ad4-11ce-b03a-0020af0ba770} Wine's strmif.h declares IID_IResourceManager, while SDK declares __declspec(uuid) as IResourceManager. SDK declares IID_IResourceManager elsewhere:
http://mikolajapp.appspot.com/uuid/query?q={03741d21-87eb-11ce-8081-0080c758527e} I'm new to COM, so I'm not sure what exactly is the difference between IID and declspec(uuid). Could anyone explain or suggest a fix? Thanks, Daniel
Check that you are only doing ONE of the following: 1. Use "-luuid", which you are using 2. #include <initguid.h> or #define INITGUID (which is what it does) before including the relevant COM headers Never both, or you'll get those multiple definitions. Damjan On Fri, May 3, 2013 at 11:31 AM, Daniel Jeliński <djelinski1(a)gmail.com>wrote:
Additional info: after my patches amstream fails to link complaining about duplicate IID_IResourceManager: ~/wine-git/dlls/amstream$ make ../../tools/winegcc/winegcc -m32 -B../../tools/winebuild --sysroot=../.. -fasynchronous-unwind-tables -shared ./amstream.spec amstream.o audiodata.o main.o mediastream.o mediastreamfilter.o amstream_classes_r.res version.res -o amstream.dll.so -lstrmiids -lstrmbase -luuid -lole32 -ladvapi32 ../../libs/port/libwine_port.a ../../dlls/uuid/libuuid.a(uuid.o):(.rodata+0x540): multiple definition of `IID_IResourceManager' ../../dlls/strmiids/libstrmiids.a(strmiids.o):(.rodata+0x5e0): first defined here winebuild: /usr/bin/ld failed with status 1 winegcc: ../../tools/winebuild/winebuild failed
if I don't add the DTC headers to uuid, linking xolehlp fails: ~/wine-git/dlls/xolehlp$ make ../../tools/winegcc/winegcc -m32 -B../../tools/winebuild --sysroot=../.. -fasynchronous-unwind-tables -shared ./xolehlp.spec xolehlp.o -o xolehlp.dll.so -luuid ../../libs/port/libwine_port.a
xolehlp.o: In function `TransactionDispenser_QueryInterface': /home/daniel/wine-git/dlls/xolehlp/xolehlp.c:170: undefined reference to `IID_ITransactionDispenser' /usr/bin/ld: xolehlp.o: relocation R_386_GOTOFF against undefined hidden symbol `IID_ITransactionDispenser' can not be used when making a shared object /usr/bin/ld: final link failed: Bad value
How do I know which dll should export these IIDs?
2013/5/2 Daniel Jeliński <djelinski1(a)gmail.com>
Hello, I just tried compiling all of Wine with my patch series applied and, to my surprise, compilation failed. The reason was that IID_IResourceManager was already declared elsewhere.
Now, according to this page:
http://mikolajapp.appspot.com/uuid/query?q={56a868ac-0ad4-11ce-b03a-0020af0ba770} Wine's strmif.h declares IID_IResourceManager, while SDK declares __declspec(uuid) as IResourceManager. SDK declares IID_IResourceManager elsewhere:
http://mikolajapp.appspot.com/uuid/query?q={03741d21-87eb-11ce-8081-0080c758527e} I'm new to COM, so I'm not sure what exactly is the difference between IID and declspec(uuid). Could anyone explain or suggest a fix? Thanks, Daniel
Thanks, INITGUID was the piece I was missing. 2013/5/3 Damjan Jovanovic <damjan.jov(a)gmail.com>
Check that you are only doing ONE of the following: 1. Use "-luuid", which you are using 2. #include <initguid.h> or #define INITGUID (which is what it does) before including the relevant COM headers Never both, or you'll get those multiple definitions.
Damjan
On Fri, May 3, 2013 at 11:31 AM, Daniel Jeliński <djelinski1(a)gmail.com>wrote:
Additional info: after my patches amstream fails to link complaining about duplicate IID_IResourceManager: ~/wine-git/dlls/amstream$ make ../../tools/winegcc/winegcc -m32 -B../../tools/winebuild --sysroot=../.. -fasynchronous-unwind-tables -shared ./amstream.spec amstream.o audiodata.o main.o mediastream.o mediastreamfilter.o amstream_classes_r.res version.res -o amstream.dll.so -lstrmiids -lstrmbase -luuid -lole32 -ladvapi32 ../../libs/port/libwine_port.a ../../dlls/uuid/libuuid.a(uuid.o):(.rodata+0x540): multiple definition of `IID_IResourceManager' ../../dlls/strmiids/libstrmiids.a(strmiids.o):(.rodata+0x5e0): first defined here winebuild: /usr/bin/ld failed with status 1 winegcc: ../../tools/winebuild/winebuild failed
if I don't add the DTC headers to uuid, linking xolehlp fails: ~/wine-git/dlls/xolehlp$ make ../../tools/winegcc/winegcc -m32 -B../../tools/winebuild --sysroot=../.. -fasynchronous-unwind-tables -shared ./xolehlp.spec xolehlp.o -o xolehlp.dll.so -luuid ../../libs/port/libwine_port.a
xolehlp.o: In function `TransactionDispenser_QueryInterface': /home/daniel/wine-git/dlls/xolehlp/xolehlp.c:170: undefined reference to `IID_ITransactionDispenser' /usr/bin/ld: xolehlp.o: relocation R_386_GOTOFF against undefined hidden symbol `IID_ITransactionDispenser' can not be used when making a shared object /usr/bin/ld: final link failed: Bad value
How do I know which dll should export these IIDs?
2013/5/2 Daniel Jeliński <djelinski1(a)gmail.com>
Hello, I just tried compiling all of Wine with my patch series applied and, to my surprise, compilation failed. The reason was that IID_IResourceManager was already declared elsewhere.
Now, according to this page:
http://mikolajapp.appspot.com/uuid/query?q={56a868ac-0ad4-11ce-b03a-0020af0ba770} Wine's strmif.h declares IID_IResourceManager, while SDK declares __declspec(uuid) as IResourceManager. SDK declares IID_IResourceManager elsewhere:
http://mikolajapp.appspot.com/uuid/query?q={03741d21-87eb-11ce-8081-0080c758527e} I'm new to COM, so I'm not sure what exactly is the difference between IID and declspec(uuid). Could anyone explain or suggest a fix? Thanks, Daniel
participants (2)
-
Damjan Jovanovic -
Daniel Jeliński