求教,package.tools.xxx下面是如何自动取得所需的lib的? #3061
-
最近写规则有点摸不着头脑,package规则写下来发现include是对的,但是最后链接的时候居然一个静态库都没附加。而查看manifest则能看到有包含正确的link信息 package("wx")
set_urls("https://github.com/wxWidgets/wxWidgets/releases/download/v$(version)/wxWidgets-$(version).7z")
add_versions("3.2.1","3AA02ED68662A55FD8AB2B8AD3A534986554E8B1BAC0970C3E1D9AA9027F83F5")
--set_sourcedir("$(projectdir)/third/wxwidgets_3_2_1")
add_deps("z")
add_deps("curl",{configs = {usesystem = true}})
add_ldflags("-static","-mwindows")
add_links("wx_mswu-3.2-i686-w64-mingw32",“wxtiff-3.2-i686-w64-mingw32" ,"wxjpeg-3.2-i686-w64-mingw32","wxpng-3.2-i686-w64-mingw32", "wxregexu-3.2-i686-w64-mingw32", "wxscintilla-3.2-i686-w64-mingw32")
add_defines("__WXMSW__","_FILE_OFFSET_BITS=64")
add_syslinks("imm32","expat","rpcrt4","oleaut32","ole32","uuid","uxtheme","winspool","winmm","shell32","shlwapi","comctl32","comdlg32","advapi32","version","ws2_32","gdi32","oleacc","winhttp")
on_install(function(package)
local cfg = {"--disable-shared","--disable-tests"}
--table.insert(cfg,"--enable-stl")
table.insert(cfg,"--enable-monolithic")
--table.insert(cfg,"--enable-permissive")
import("package.tools.autoconf").install(package, cfg)
local base = package:installdir()
local tmpdir = "wx-3.2"
local mvfunc = function(base,tmp)
local inc = "include"
os.cp(path.join(base,inc,tmp,"wx"),path.join(base,inc))
os.rmdir(path.join(base,inc,tmp))
local base1 = path.join(base .. "/lib","wx","include")
for _,v in ipairs(os.dirs(base1 .. "/*")) do
os.cp(path.join(v,"wx","setup.h"),path.join(base,inc,"wx"))
os.cp(path.join(v,"wx/*"),path.join(base,inc,"wx"))
os.rmdir(path.join(base,"lib","wx"))
break
end
end
--mvfunc(base,tmpdir)
end)
package_end() target是这么写的 add_requires("wx","sol2","lua","rapidjson")
target("wxLeiTools")
set_kind("binary")
add_packages("wx","lua","rapidjson","sol2")
add_ldflags("-static","-s")
add_files("*.cpp","*.c","*.rc")
target_end() 下面是编译效果: [ 11%]: cache compiling.release sqlite3.c
C:\Work\Msys2\mingw64\bin\x86_64-w64-mingw32-gcc -c -m64 -D__WXMSW__ -D_FILE_OFFSET_BITS=64 -DCURL_S
TATICLIB -isystem g:\Project\xmake\packages\w\wx\3.2.1\1f0abe9e0a4947ea85d2c9be433d95c6\include -isy
stem G:\Project\Code\gbgba\wxLeiTools\build\.packages\z\z\latest\dbf654cbf0394970a33564d98b8d4ac1\in
clude -isystem G:\Project\Code\gbgba\wxLeiTools\build\.packages\c\curl\latest\017f4797f9ec4405880070
bd456e5953\include -isystem g:\Project\xmake\packages\r\rapidjson\v1.1.0\0a4fe65f92a04de1a1b402f4b5d
da52d\include -isystem g:\Project\xmake\packages\s\sol2\3.32\07d58cac0a464437a3cefa43368d9a06\includ
e -isystem g:\Project\xmake\packages\l\lua\5.4.4\e08a381a86224da782c8c89aa181b6a0\include -o build\.
objs\wxLeiTools\mingw\x86_64\release\sqlite3.c.obj sqlite3.c
checking for C:\Work\Msys2\mingw64\bin\x86_64-w64-mingw32-g++ ... ok
checking for C:\Work\Msys2\mingw64\bin\x86_64-w64-mingw32-gcc ... ok
结果链接的时候完蛋了。 checking for flags (-mwindows) ... ok
[ 77%]: linking.release wxLeiTools.exe
C:\Work\Msys2\mingw64\bin\x86_64-w64-mingw32-g++ -o build\mingw\x86_64\release\wxLeiTools.exe build\
.objs\wxLeiTools\mingw\x86_64\release\luafunction.cpp.obj build\.objs\wxLeiTools\mingw\x86_64\releas
e\main.cpp.obj build\.objs\wxLeiTools\mingw\x86_64\release\mywindow.cpp.obj build\.objs\wxLeiTools\m
ingw\x86_64\release\stdafx.cpp.obj build\.objs\wxLeiTools\mingw\x86_64\release\sqlite3.c.obj build\.
objs\wxLeiTools\mingw\x86_64\release\res.rc.obj -m64 -LG:\Project\Code\gbgba\wxLeiTools\build\.packa
ges\z\z\latest\dbf654cbf0394970a33564d98b8d4ac1\lib -LG:\Project\Code\gbgba\wxLeiTools\build\.packag
es\c\curl\latest\017f4797f9ec4405880070bd456e5953\lib -Lg:\Project\xmake\packages\l\lua\5.4.4\e08a38
1a86224da782c8c89aa181b6a0\lib -lz -lcurl -llua -limm32 -lexpat -lrpcrt4 -loleaut32 -lole32 -luuid -
luxtheme -lwinspool -lwinmm -lshell32 -lshlwapi -lcomctl32 -lcomdlg32 -ladvapi32 -lversion -lws2_32
-lgdi32 -loleacc -lwinhttp -lcrypt32 -lwldap32 -lwininet -lbcrypt -mwindows -static -s
C:/Work/Msys2/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld
.exe: build\.objs\wxLeiTools\mingw\x86_64\release\luafunction.cpp.obj:luafunction.cp:(.text+0x34e9):
undefined reference to `wxMenuBase::Check(int, bool)'
C:/Work/Msys2/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld
.exe: build\.objs\wxLeiTools\mingw\x86_64\release\luafunction.cpp.obj:luafunction.cp:(.text+0x3668):
undefined reference to `wxMenuBase::Enable(int, bool)'
生成的manifest.txt {
name = "wx",
configs = {
debug = false,
shared = false,
pic = true
},
deps = {
z = {
version = "latest",
buildhash = "dbf654cbf0394970a33564d98b8d4ac1"
},
curl = {
version = "latest",
buildhash = "017f4797f9ec4405880070bd456e5953"
}
},
version = "3.2.1",
envs = {
PATH = {
"bin"
}
},
librarydeps = {
"z",
"curl"
},
arch = "x86_64",
vars = {
links = {
"wx_mswu-3.2-i686-w64-mingw32",
"wxtiff-3.2-i686-w64-mingw32",
"wxjpeg-3.2-i686-w64-mingw32",
"wxpng-3.2-i686-w64-mingw32",
"wxregexu-3.2-i686-w64-mingw32",
"wxscintilla-3.2-i686-w64-mingw32"
},
defines = {
"__WXMSW__",
"_FILE_OFFSET_BITS=64"
},
ldflags = {
"-static",
"-mwindows"
},
syslinks = {
"imm32",
"expat",
"rpcrt4",
"oleaut32",
"ole32",
"uuid",
"uxtheme",
"winspool",
"winmm",
"shell32",
"shlwapi",
"comctl32",
"comdlg32",
"advapi32",
"version",
"ws2_32",
"gdi32",
"oleacc",
"winhttp"
}
},
mode = "release",
artifacts = {
installdir = [[g:\Project\xmake\packages\w\wx\3.2.1\1f0abe9e0a4947ea85d2c9be433d95c6]]
},
plat = "mingw"
} |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments 2 replies
-
--add_links("wx_mswu-3.2-i686-w64-mingw32","wxtiff-3.2-i686-w64-mingw32" ,"wxjpeg-3.2-i686-w64-mingw32","wxpng-3.2-i686-w64-mingw32", "wxregexu-3.2-i686-w64-mingw32", "wxscintilla-3.2-i686-w64-mingw32") 把这行注释了,结果自动找到lib了,但是链接顺序出问题了。迷茫 C:/Work/Msys2/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld
.exe: g:\Project\xmake\packages\w\wx\3.2.1\1f0abe9e0a4947ea85d2c9be433d95c6\lib\libwx_mswu-3.2-x86_6
4-w64-mingw32.a(monolib_imagpng.o):imagpng.cpp:(.text+0x3bc7): undefined reference to `wx_png_destro
y_write_struct'
collect2.exe: error: ld returned 1 exit status
error: execv(C:\Work\Msys2\mingw64\bin\x86_64-w64-mingw32-g++ -o build\mingw\x86_64\release\wxLeiToo
ls.exe build\.objs\wxLeiTools\mingw\x86_64\release\luafunction.cpp.obj build\.objs\wxLeiTools\mingw\
x86_64\release\main.cpp.obj build\.objs\wxLeiTools\mingw\x86_64\release\mywindow.cpp.obj build\.objs
\wxLeiTools\mingw\x86_64\release\stdafx.cpp.obj build\.objs\wxLeiTools\mingw\x86_64\release\sqlite3.
c.obj build\.objs\wxLeiTools\mingw\x86_64\release\res.rc.obj -m64 -Lg:\Project\xmake\packages\w\wx\3
.2.1\1f0abe9e0a4947ea85d2c9be433d95c6\lib -LG:\Project\Code\gbgba\wxLeiTools\build\.packages\z\z\lat
est\dbf654cbf0394970a33564d98b8d4ac1\lib -LG:\Project\Code\gbgba\wxLeiTools\build\.packages\c\curl\l
atest\017f4797f9ec4405880070bd456e5953\lib -Lg:\Project\xmake\packages\l\lua\5.4.4\e08a381a86224da78
2c8c89aa181b6a0\lib -lwxjpeg-3.2-x86_64-w64-mingw32 -lwxpng-3.2-x86_64-w64-mingw32 -lwxregexu-3.2-x8
6_64-w64-mingw32 -lwxscintilla-3.2-x86_64-w64-mingw32 -lwxtiff-3.2-x86_64-w64-mingw32 -lwx_mswu-3.2-
x86_64-w64-mingw32 -lwx_mswu_gl-3.2-x86_64-w64-mingw32 -lz -lcurl -llua -limm32 -lexpat -lrpcrt4 -lo
leaut32 -lole32 -luuid -luxtheme -lwinspool -lwinmm -lshell32 -lshlwapi -lcomctl32 -lcomdlg32 -ladva
pi32 -lversion -lws2_32 -lgdi32 -loleacc -lwinhttp -lcrypt32 -lwldap32 -lwininet -lbcrypt -mwindows
-static -s) failed(1)
|
Beta Was this translation helpful? Give feedback.
-
看自动找到的库名 不是很明显么,你 add_links 里面没写对,明明安装后 lib 目录下是 wx_mswu-3.2-x86_64-w64-mingw32 你去配置 wx_mswu-3.2-i686-w64-mingw32 ,注意 x86_64 不是 i686
|
Beta Was this translation helpful? Give feedback.
看自动找到的库名 不是很明显么,你 add_links 里面没写对,明明安装后 lib 目录下是 wx_mswu-3.2-x86_64-w64-mingw32
你去配置 wx_mswu-3.2-i686-w64-mingw32 ,注意 x86_64 不是 i686