Open hanyuone opened 6 years ago
When statically linking, you'll need to include the list of libraries libui links against, which is, for alpha 4:
user32 kernel32 gdi32 comctl32 uxtheme msimg32 comdlg32 d2d1 dwrite ole32 oleaut32 oleacc uuid windowscodecs
So you'll need to add this to the linker flags:
user32.lib kernel32.lib gdi32.lib comctl32.lib uxtheme.lib msimg32.lib comdlg32.lib d2d1.lib dwrite.lib ole32.lib oleaut32.lib oleacc.lib uuid.lib windowscodecs.lib
If you're using cl
without calling the linker, prefix all that with a /LINK
(or -LINK
or maybe even -link
I forget now). I'm not sure if uuid.lib
is needed, though.
Thanks for the quick reply. I still have two more errors:
libui.lib(fontdialog.obj) : error LNK2019: unresolved external symbol __imp_wcstod referenced in function "struct fontDialog * __cdecl beginFontDialog(struct HWND__ *,__int64)" (?beginFontDialog@@YAPEAUfontDialog@@PEAUHWND__@@_J@Z)
libui.lib(colordialog.obj) : error LNK2019: unresolved external symbol __imp__wtof referenced in function "void __cdecl aDoubleChanged(struct colorDialog *)" (?aDoubleChanged@@YAXPEAUcolorDialog@@@Z)
Not sure how to fix those.
Should there be instructions to include those libraries in README.md
when using cl
?
Oh right, you'll also need the proper msvcrt
. I forget what version VS2017 belongs to.
I got this error message: 无法定位序数334于动态链接库D:\libui-test\main.exe上
。I have done my best to translate it: Cannot locate serial number 334 on the dynamically linked library D:\libui-test\main.exe
. The source is EXACTLY same with examples/controlgallery/main.c, only that I changed line 4 to #include<ui.h>
. Command invoked to compile was: cl main.c libui.lib /link user32.lib kernel32.lib gdi32.lib comctl32.lib uxtheme.lib msimg32.lib comdlg32.lib d2d1.lib dwrite.lib ole32.lib oleaut32.lib oleacc.lib uuid.lib windowscodecs.lib msvcrt.lib
Command line name: x64 Native Tools Command Prompt for VS 2019 Preview
.
Full command output:
Microsoft (R) C/C++ Optimizing Compiler Version 19.26.28720.3 for x64
Copyright (C) Microsoft Corporation. All rights reserved.
main.c
D:\libui-test\ui.h(686): warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss
Microsoft (R) Incremental Linker Version 14.26.28720.3
Copyright (C) Microsoft Corporation. All rights reserved.
/out:main.exe
user32.lib
kernel32.lib
gdi32.lib
comctl32.lib
uxtheme.lib
msimg32.lib
comdlg32.lib
d2d1.lib
dwrite.lib
ole32.lib
oleaut32.lib
oleacc.lib
uuid.lib
windowscodecs.lib
msvcrt.lib
main.obj
libui.lib
Creating library main.lib and object main.exp
LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library
Note: I am using Visual Studio 2019, 16.0.0-pre2.0 NOT 2017. Is that the problem?
Output of dir
command:
D:\libui-test>dir
驱动器 D 中的卷是 新加卷
卷的序列号是 AC43-D221
D:\libui-test 的目录
2020/05/14 21:43 <DIR> .
2020/05/14 21:43 <DIR> ..
2020/03/05 20:03 1,671,521 libui-alpha4.1-windows-amd64-msvc2017-static.zip
2018/09/02 09:14 6,148,802 libui.lib
2020/05/14 21:33 12,596 main.c
2020/05/14 21:37 211,968 main.exe
2020/05/14 21:37 30,847 main.exp
2020/05/14 21:33 50,822 main.lib
2020/05/14 21:37 13,146 main.obj
2018/09/02 09:12 63,382 ui.h
2018/09/02 09:12 10,137 ui_windows.h
9 个文件 8,213,221 字节
2 个目录 838,636,240,896 可用字节
See attachment for a picture.
It seems like the /M
options need to match as well, hmmm. Try adding /MD
or /MT
before /ilnk
. I don't know which one is correct off the top of my head; sorry.
Thanks for your reply. I'm currently not on that computer, but I wil try that as soon as I can.
I am not very familiar with Windows, but I have mostly identified the cause. The problem occurs when calling MsgBox, which is implemented with TaskDialog. TaskDialog needs comctl32 version 6, but the default is version 5. To fix this, you need to specify version 6, for example, by creating a manifest file in the same folder as the executable.
While this may be a bit inconvenient for a portable library like libui, it is a workable solution.
I'm using the x64 Native Tools Command Prompt for VS 2017, and I'm trying to convert a
.o
file generated via Crystal code (code here, the.o
file generated using these instructions).I have the
libui.lib
from the release file for 64-bit VS 2017, and I've copied it intoC:\Crystal
, along with otherlib
files required for Crystal (gc.lib
,pcre.lib
) andcontrol_gallery.o
. However, once I run thecl
command, it doesn't work and raisesLNK2001
andLNK2019
errors.Here is my folder structure:
Here is the full error log: