SwiftImGui icon indicating copy to clipboard operation
SwiftImGui copied to clipboard

Problem building because of missing references to math functions on Linux

Open xiroV opened this issue 3 years ago • 1 comments

Bug Description

Unsure if the problem is just me or my setup, but I could use some assistance on installation if possible.

I've added the SwiftImGui package to a new Swift project according to the README. On build it seems like there's a problem linking functions from math.h.

Information

  • Package version: 1.82.0
  • Platform version: Ubuntu 20.04
  • Swift version:
Swift version 5.5.1 (swift-5.5.1-RELEASE)
Target: x86_64-unknown-linux-gnu

Checklist

  • [x] If possible, I've reproduced the issue using the main/master branch of this package.
  • [x] I've searched for existing issues under the issues tab.
  • [x] The bug is reproducible

Steps to Reproduce

  1. Made a new project, by initializing it in an empty folder:
swift package init --type executable
  1. Added SwiftImGui to Package.swift according to the README:
import PackageDescription

let package = Package(
    name: "TestProject",
    dependencies: [
        .package(url: "https://github.com/ctreffs/SwiftImGui.git", from: "1.82.0")
    ],
    targets: [
        .executableTarget(
            name: "TestProject",
            dependencies: [
                .product(name: "ImGui", package: "SwiftImGui")
            ]),
        .testTarget(
            name: "TestProjectTests",
            dependencies: ["TestProject"]),
    ]
)
  1. Added import ImGui to the main.swift file
  2. Tried building using swift build

Expected behavior

Expected it to build the project.

Actual behavior

Seems like there was a problem linking math.h

.build/checkouts/SwiftImGui/Sources/CImGui/./imgui/imgui_internal.h:369: error: undefined reference to 'powf'
.build/checkouts/SwiftImGui/Sources/CImGui/./imgui/imgui_internal.h:370: error: undefined reference to 'pow'
.build/checkouts/SwiftImGui/Sources/CImGui/./imgui/imgui_internal.h:371: error: undefined reference to 'logf'
.build/checkouts/SwiftImGui/Sources/CImGui/./imgui/imgui_internal.h:372: error: undefined reference to 'log'
.build/checkouts/SwiftImGui/Sources/CImGui/./imgui/imgui_internal.h:397: error: undefined reference to 'sqrtf'
.build/checkouts/SwiftImGui/Sources/CImGui/imgui/imgui.cpp:1839: error: undefined reference to 'fmodf'
.build/checkouts/SwiftImGui/Sources/CImGui/imgui/imgui_demo.cpp:430: error: undefined reference to 'fmodf'
.build/checkouts/SwiftImGui/Sources/CImGui/imgui/imgui_demo.cpp:7342: error: undefined reference to 'fmodf'
.build/checkouts/SwiftImGui/Sources/CImGui/imgui/imgui_demo.cpp:7344: error: undefined reference to 'fmodf'
.build/checkouts/SwiftImGui/Sources/CImGui/imgui/imgui_demo.cpp:6071: error: undefined reference to 'floorf'
.build/checkouts/SwiftImGui/Sources/CImGui/imgui/imgui_demo.cpp:1203: error: undefined reference to 'cosf'
.build/checkouts/SwiftImGui/Sources/CImGui/imgui/imgui_demo.cpp:1203: error: undefined reference to 'sinf'
.build/checkouts/SwiftImGui/Sources/CImGui/imgui/imgui_demo.cpp:1576: error: undefined reference to 'cosf'
.build/checkouts/SwiftImGui/Sources/CImGui/imgui/imgui_demo.cpp:2891: error: undefined reference to 'sinf'
.build/checkouts/SwiftImGui/Sources/CImGui/imgui/imgui_demo.cpp:5781: error: undefined reference to 'sqrtf'
.build/checkouts/SwiftImGui/Sources/CImGui/imgui/imgui_demo.cpp:1600: error: undefined reference to 'sinf'
.build/checkouts/SwiftImGui/Sources/CImGui/imgui/imgui_draw.cpp:375: error: undefined reference to 'cosf'
.build/checkouts/SwiftImGui/Sources/CImGui/imgui/imgui_draw.cpp:375: error: undefined reference to 'sinf'
.build/checkouts/SwiftImGui/Sources/CImGui/imgui/imgui_draw.cpp:377: error: undefined reference to 'cosf'
.build/checkouts/SwiftImGui/Sources/CImGui/imgui/imgui_draw.cpp:390: error: undefined reference to 'acosf'
.build/checkouts/SwiftImGui/Sources/CImGui/imgui/imgui_draw.cpp:390: error: undefined reference to 'ceilf'
.build/checkouts/SwiftImGui/Sources/CImGui/imgui/imgui_draw.cpp:556: error: undefined reference to 'acosf'
.build/checkouts/SwiftImGui/Sources/CImGui/imgui/imgui_draw.cpp:556: error: undefined reference to 'ceilf'
.build/checkouts/SwiftImGui/Sources/CImGui/imgui/imgui_draw.cpp:740: error: undefined reference to 'sqrtf'
.build/checkouts/SwiftImGui/Sources/CImGui/imgui/imgui_draw.cpp:933: error: undefined reference to 'sqrtf'
.build/checkouts/SwiftImGui/Sources/CImGui/imgui/imgui_draw.cpp:1163: error: undefined reference to 'ceilf'
.build/checkouts/SwiftImGui/Sources/CImGui/imgui/imgui_draw.cpp:1184: error: undefined reference to 'ceilf'
.build/checkouts/SwiftImGui/Sources/CImGui/imgui/imgui_draw.cpp:3782: error: undefined reference to 'acosf'
ned reference to 'floorf'
.build/checkouts/SwiftImGui/Sources/CImGui/imgui/imstb_truetype.h:2641: error: undefined reference to 'floorf'
.build/checkouts/SwiftImGui/Sources/CImGui/imgui/imstb_truetype.h:4199: error: undefined reference to 'floorf'
.build/checkouts/SwiftImGui/Sources/CImGui/imgui/imgui_widgets.cpp:5033: error: undefined reference to 'atan2f'
.build/checkouts/SwiftImGui/Sources/CImGui/imgui/imgui_internal.h:369: error: undefined reference to 'powf'
.build/checkouts/SwiftImGui/Sources/CImGui/imgui/imgui_internal.h:371: error: undefined reference to 'logf'
.build/checkouts/SwiftImGui/Sources/CImGui/imgui/imgui_internal.h:372: error: undefined reference to 'log'
.build/checkouts/SwiftImGui/Sources/CImGui/imgui/imgui_internal.h:370: error: undefined reference to 'pow'
clang-10: error: linker command failed with exit code 1 (use -v to see invocation)
[0/1] Linking TestProject

xiroV avatar Feb 19 '22 08:02 xiroV

Thank you for reporting this issue. I'm sorry for the late reply, github did not notify me about the new issue. I'm seeing this on the Linux CI as well. Will have a look at it for a fix.

ctreffs avatar Mar 16 '22 11:03 ctreffs

This issue still exists btw, any work arounds? @ctreffs @xiroV

hggz avatar Apr 25 '23 22:04 hggz

The fix is to add linkerSettings in the package file for linux that link libm (-lm)

hggz avatar Apr 26 '23 00:04 hggz

https://github.com/ctreffs/SwiftImGui/releases/tag/1.89.5 and https://github.com/ctreffs/SwiftImGui/releases/tag/1.89.5-docking contain the fix

ctreffs avatar Apr 26 '23 08:04 ctreffs