mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-06-14 02:19:58 +08:00
🐛 fix(ci): 修复 DuckDB Windows 可选驱动构建的 CGO 参数污染
This commit is contained in:
9
.github/workflows/dev-build.yml
vendored
9
.github/workflows/dev-build.yml
vendored
@@ -556,7 +556,7 @@ jobs:
|
||||
rm -f "$zip_path"
|
||||
local attempt dll_path
|
||||
for attempt in 1 2 3; do
|
||||
echo "📥 下载 DuckDB Windows 动态库 (${attempt}/3): ${DUCKDB_WINDOWS_LIBRARY_URL}"
|
||||
echo "📥 下载 DuckDB Windows 动态库 (${attempt}/3): ${DUCKDB_WINDOWS_LIBRARY_URL}" >&2
|
||||
if curl --retry 3 --retry-delay 2 --retry-all-errors --connect-timeout 20 --max-time 300 -fsSL "$DUCKDB_WINDOWS_LIBRARY_URL" -o "$zip_path"; then
|
||||
if unzip -tq "$zip_path" >/dev/null 2>&1; then
|
||||
rm -rf "$lib_dir"
|
||||
@@ -575,12 +575,12 @@ jobs:
|
||||
echo "$lib_dir"
|
||||
return 0
|
||||
fi
|
||||
echo "⚠️ DuckDB Windows 动态库压缩包缺少 duckdb.dll,准备重试"
|
||||
echo "⚠️ DuckDB Windows 动态库压缩包缺少 duckdb.dll,准备重试" >&2
|
||||
else
|
||||
echo "⚠️ DuckDB Windows 动态库压缩包校验失败,准备重试"
|
||||
echo "⚠️ DuckDB Windows 动态库压缩包校验失败,准备重试" >&2
|
||||
fi
|
||||
else
|
||||
echo "⚠️ DuckDB Windows 动态库下载失败,准备重试"
|
||||
echo "⚠️ DuckDB Windows 动态库下载失败,准备重试" >&2
|
||||
fi
|
||||
rm -f "$zip_path"
|
||||
rm -rf "$lib_dir"
|
||||
@@ -618,6 +618,7 @@ jobs:
|
||||
if [ -n "$DUCKDB_LIB_DIR" ]; then
|
||||
DUCKDB_LIB_DIR_GCC="$(cygpath -m "$DUCKDB_LIB_DIR")"
|
||||
DUCKDB_LIB_DIR_PATH="$(cygpath -u "$DUCKDB_LIB_DIR")"
|
||||
# cgo 会把每个 CGO_LDFLAGS 片段转成 //go:cgo_ldflag,-L 参数不能再额外包引号。
|
||||
DUCKDB_WINDOWS_CGO_LDFLAGS="-L${DUCKDB_LIB_DIR_GCC} -lduckdb -lstdc++ -lm -lws2_32 -lwsock32 -lrstrtmgr"
|
||||
CGO_ENABLED=1 GOOS="$GOOS" GOARCH="$GOARCH" CGO_LDFLAGS="${DUCKDB_WINDOWS_CGO_LDFLAGS}" PATH="${DUCKDB_LIB_DIR_PATH}:$PATH" go build \
|
||||
-tags "${BUILD_TAGS}" \
|
||||
|
||||
9
.github/workflows/release.yml
vendored
9
.github/workflows/release.yml
vendored
@@ -554,7 +554,7 @@ jobs:
|
||||
rm -f "$zip_path"
|
||||
local attempt dll_path
|
||||
for attempt in 1 2 3; do
|
||||
echo "📥 下载 DuckDB Windows 动态库 (${attempt}/3): ${DUCKDB_WINDOWS_LIBRARY_URL}"
|
||||
echo "📥 下载 DuckDB Windows 动态库 (${attempt}/3): ${DUCKDB_WINDOWS_LIBRARY_URL}" >&2
|
||||
if curl --retry 3 --retry-delay 2 --retry-all-errors --connect-timeout 20 --max-time 300 -fsSL "$DUCKDB_WINDOWS_LIBRARY_URL" -o "$zip_path"; then
|
||||
if unzip -tq "$zip_path" >/dev/null 2>&1; then
|
||||
rm -rf "$lib_dir"
|
||||
@@ -573,12 +573,12 @@ jobs:
|
||||
echo "$lib_dir"
|
||||
return 0
|
||||
fi
|
||||
echo "⚠️ DuckDB Windows 动态库压缩包缺少 duckdb.dll,准备重试"
|
||||
echo "⚠️ DuckDB Windows 动态库压缩包缺少 duckdb.dll,准备重试" >&2
|
||||
else
|
||||
echo "⚠️ DuckDB Windows 动态库压缩包校验失败,准备重试"
|
||||
echo "⚠️ DuckDB Windows 动态库压缩包校验失败,准备重试" >&2
|
||||
fi
|
||||
else
|
||||
echo "⚠️ DuckDB Windows 动态库下载失败,准备重试"
|
||||
echo "⚠️ DuckDB Windows 动态库下载失败,准备重试" >&2
|
||||
fi
|
||||
rm -f "$zip_path"
|
||||
rm -rf "$lib_dir"
|
||||
@@ -616,6 +616,7 @@ jobs:
|
||||
if [ -n "$DUCKDB_LIB_DIR" ]; then
|
||||
DUCKDB_LIB_DIR_GCC="$(cygpath -m "$DUCKDB_LIB_DIR")"
|
||||
DUCKDB_LIB_DIR_PATH="$(cygpath -u "$DUCKDB_LIB_DIR")"
|
||||
# cgo 会把每个 CGO_LDFLAGS 片段转成 //go:cgo_ldflag,-L 参数不能再额外包引号。
|
||||
DUCKDB_WINDOWS_CGO_LDFLAGS="-L${DUCKDB_LIB_DIR_GCC} -lduckdb -lstdc++ -lm -lws2_32 -lwsock32 -lrstrtmgr"
|
||||
CGO_ENABLED=1 GOOS="$GOOS" GOARCH="$GOARCH" CGO_LDFLAGS="${DUCKDB_WINDOWS_CGO_LDFLAGS}" PATH="${DUCKDB_LIB_DIR_PATH}:$PATH" go build \
|
||||
-tags "${BUILD_TAGS}" \
|
||||
|
||||
@@ -4132,7 +4132,8 @@ func withEnvValue(env []string, key string, value string) []string {
|
||||
func duckDBWindowsDynamicLibraryCGOLDFlags(libDir string) string {
|
||||
normalizedDir := filepath.ToSlash(strings.TrimSpace(libDir))
|
||||
parts := []string{
|
||||
fmt.Sprintf("-L\"%s\"", normalizedDir),
|
||||
// cgo 会把每个 CGO_LDFLAGS 片段转成 //go:cgo_ldflag,带引号的 -L 在 windows/amd64 上会被当成非法参数。
|
||||
fmt.Sprintf("-L%s", normalizedDir),
|
||||
"-lduckdb",
|
||||
"-lstdc++",
|
||||
"-lm",
|
||||
|
||||
@@ -430,7 +430,7 @@ func TestDuckDBWindowsBuildUsesDynamicLibraryTag(t *testing.T) {
|
||||
func TestDuckDBWindowsDynamicLibraryCGOLDFlagsIncludeSupportLibraries(t *testing.T) {
|
||||
flags := duckDBWindowsDynamicLibraryCGOLDFlags(`C:\tmp\duckdb lib`)
|
||||
for _, expected := range []string{
|
||||
`-L"C:/tmp/duckdb lib"`,
|
||||
`-LC:/tmp/duckdb lib`,
|
||||
"-lduckdb",
|
||||
"-lstdc++",
|
||||
"-lm",
|
||||
|
||||
Reference in New Issue
Block a user