Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

multiple definition error when compiling native code #1290

Closed
armanbilge opened this issue Aug 25, 2022 · 2 comments
Closed

multiple definition error when compiling native code #1290

armanbilge opened this issue Aug 25, 2022 · 2 comments

Comments

@armanbilge
Copy link
Contributor

Version(s)
0.1.12

Describe the bug
Following the instructions for creating Scala Native application with Native code doesn't work due to a multiple definition error.

http://www.scala-native.org/en/latest/user/sbt.html#applications-with-native-code

To Reproduce
resources/scala-native/bug.c

int foo(int i) {
  return i + 42;
}

bug.scala

//> using platform "native"
//> using resourceDir "./resources"

import scalanative.unsafe.*

@extern
def foo(int: CInt): CInt = extern

@main def main =
  println(foo(3))
$ scala-cli bug.scala 
Compiling project (Scala 3.1.3, Scala Native)
Compiled project (Scala 3.1.3, Scala Native)
[info] Linking (2575 ms)
[info] Discovered 665 classes and 3691 methods
[info] Optimizing (debug mode) (2722 ms)
[info] Generating intermediate code (1956 ms)
[info] Produced 16 files
[info] Compiling to native code (2162 ms)
[error] /usr/bin/ld: /workspace/sandbox/.scala-build/project_3e87ab6122_3e87ab6122-45290ff20c/native/native-code-resources-1/scala-native/bug.c.o: in function `foo':
[error] bug.c:(.text+0x0): multiple definition of `foo'; /workspace/sandbox/.scala-build/project_3e87ab6122_3e87ab6122-45290ff20c/native/native-code-main-0/scala-native/bug.c.o:bug.c:(.text+0x0): first defined here
[error] /usr/bin/ld: /workspace/sandbox/.scala-build/project_3e87ab6122_3e87ab6122-45290ff20c/native/native-code-main14358077217882765813-6/scala-native/bug.c.o: in function `foo':
[error] bug.c:(.text+0x0): multiple definition of `foo'; /workspace/sandbox/.scala-build/project_3e87ab6122_3e87ab6122-45290ff20c/native/native-code-main-0/scala-native/bug.c.o:bug.c:(.text+0x0): first defined here
[error] clang: error: linker command failed with exit code 1 (use -v to see invocation)
Exception in thread "main" scala.scalanative.build.BuildException: Failed to link /workspace/sandbox/.scala-build/project_3e87ab6122_3e87ab6122-45290ff20c/native/main
        at scala.scalanative.build.LLVM$.$anonfun$link$3(LLVM.scala:139)
        at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
        at scala.scalanative.build.Logger.time(Logger.scala:35)
        at scala.scalanative.build.Logger.time$(Logger.scala:32)
        at scala.scalanative.cli.utils.FilteredLogger.time(FilteredLogger.scala:5)
        at scala.scalanative.build.LLVM$.link(LLVM.scala:134)
        at scala.scalanative.build.Build$.$anonfun$build$1(Build.scala:97)
        at scala.scalanative.build.Logger.time(Logger.scala:35)
        at scala.scalanative.build.Logger.time$(Logger.scala:32)
        at scala.scalanative.cli.utils.FilteredLogger.time(FilteredLogger.scala:5)
        at scala.scalanative.build.Build$.build(Build.scala:55)
        at scala.scalanative.cli.ScalaNativeLd$.$anonfun$runLd$3(ScalaNativeLd.scala:71)
        at scala.scalanative.util.Scope$.apply(Scope.scala:32)
        at scala.scalanative.cli.ScalaNativeLd$.runLd(ScalaNativeLd.scala:70)
        at scala.scalanative.cli.ScalaNativeLd$.main(ScalaNativeLd.scala:44)
        at scala.scalanative.cli.ScalaNativeLd.main(ScalaNativeLd.scala)
Error: scala.build.errors.ScalaNativeBuildError: Error compiling with Scala Native
For more details, please see '/workspace/sandbox/.scala-build/stacktraces/1661433802-2294276439271201219.log'

Expected behaviour

It should work :)

@armanbilge
Copy link
Contributor Author

Sounds like it may be fixed by #812? :)

@lwronski
Copy link
Contributor

Sounds like it may be fixed by #812? :)

Yes, it should be fixed in Scala CLI 0.1.14

resources/scala-native/bug.c

int foo(int i) {
  return i + 42;
}

bug.scala

//> using platform "native"
//> using resourceDir "./resources"

import scalanative.unsafe.*

@extern
def foo(int: CInt): CInt = extern

@main def main =
  println(foo(3))
$ scala-cli bug.scala 
Compiling project (Scala 3.2.0, Scala Native)
Compiled project (Scala 3.2.0, Scala Native)
[info] Linking (1885 ms)
[info] Discovered 666 classes and 3692 methods
[info] Optimizing (debug mode) (1437 ms)
[info] Embedded resource: /LICENSE
[info] Embedded resource: /NOTICE
[info] Embedded resource: /library.properties
[info] Embedded resource: /rootdoc.txt
[info] Embedded resource: /META-INF/MANIFEST.MF
[info] Generating intermediate code (1091 ms)
[info] Produced 8 files
[info] Compiling to native code (3460 ms)
[info] Linking native code (immix gc, none lto) (194 ms)
[info] Total (8203 ms)
45

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants