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

libLLVM-3.6.so.1: error adding symbols: DSO missing from command line #25

Open
zcassini opened this issue Jun 15, 2016 · 11 comments
Open

Comments

@zcassini
Copy link

zcassini commented Jun 15, 2016

I'm getting this error trying to generate the examples.
I have libllvm3.6v5 and libllvm3.6-dbg packages installed.
I also have llvm 3.8 installed.
I'm not sure how this linking works.

> crystal src/main.cr -- examples/lib_git2.cr
/usr/bin/ld: /opt/crystal/embedded/lib/../lib/libgc.a(os_dep.o): undefined reference to symbol '_end'
//usr/lib/x86_64-linux-gnu/libLLVM-3.6.so.1: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
Error: execution of command failed with code: 1: `cc -o "/home/zac/.cache/crystal/crystal-run-main.tmp" "${@}"  -rdynamic  -L/usr/lib -L/usr/local/lib `llvm-config-3.6 --ldflags 2>/dev/null || llvm-config-3.5 --ldflags 2>/dev/null || llvm-config --ldflags 2>/dev/null` -lclang -lpcre -lgc -lpthread /opt/crystal/src/ext/libcrystal.a -levent -lrt -ldl`

Some version info:

> llvm-config-3.6 --version                  
3.6.2
> llvm-config --version                      
3.8.0
> crystal -v                                 
Crystal 0.18.0 [25b7925] (2016-06-14)
> cat /proc/version
Linux version 4.4.0-24-generic (buildd@lgw01-12) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2.1) ) #43-Ubuntu SMP Wed Jun 8 19:27:37 UTC 2016
> cat /etc/issue
Ubuntu 16.04 LTS \n \l
@zcassini zcassini changed the title libffi.so.6: error adding symbols: DSO missing from command line libLLVM-3.6.so.1: error adding symbols: DSO missing from command line Jun 16, 2016
@asterite
Copy link
Member

Sorry, I never tried this on Ubuntu, I'm on OSX so I don't know why it doesn't work.

Seems to be related to crystal-lang/crystal#1269 and will/crystal-pg#14

@AllanCochrane
Copy link

This is still an issue with the latest version of Crystal, any chance someone could take a look?

$ crystal -v
Crystal 0.22.0 [3c71228] (2017-04-20) LLVM 3.5.0

$ cat /etc/issue
Ubuntu 16.04.2 LTS

$ cat mosquitto.cr
@[Link("mosquitto")]
lib LibMosquitto
# In C: double cos(double x)
#fun cos(value : Float64) : Float64

fun init = mosquitto_lib_init
fun version = mosquitto_lib_version(major : Int32*, minor : Int32*, revision : Int32*) : Int32

end

LibMosquitto.init
crystal mosquitto.cr

The output is:

/usr/bin/ld: /opt/crystal/embedded/lib/../lib/libgc.a(os_dep.o): undefined reference to symbol '_end'
//usr/lib/x86_64-linux-gnu/libcares.so.2: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
Error: execution of command failed with code: 1: `cc -o "/home/allan/.cache/crystal/crystal-run-mosquitto.tmp" "${@}"  -rdynamic  -lmosquitto -lpcre -lgc -lpthread /opt/crystal/src/ext/libcrystal.a -levent -lrt -ldl -L/usr/lib -L/usr/local/lib`

@Val
Copy link

Val commented May 17, 2017

Agreed, it's still an issue. Here is another example when using mongo.cr

Environment: a Debian stable (jessie) up to date.

> crystal --version
Crystal 0.22.0 [3c71228] (2017-04-20) LLVM 3.5.0
> llvm-config-3.5 --version
3.5.0
> cat /etc/{issue,debian_version}
Debian GNU/Linux 8 \n \l

8.8

Code: an attempt to connect to a local Mongo database.

> crystal init app try_mongo
      create  try_mongo/.gitignore
      create  try_mongo/LICENSE
      create  try_mongo/README.md
      create  try_mongo/.travis.yml
      create  try_mongo/shard.yml
      create  try_mongo/src/try_mongo.cr
      create  try_mongo/src/try_mongo/version.cr
      create  try_mongo/spec/spec_helper.cr
      create  try_mongo/spec/try_mongo_spec.cr
Initialized empty Git repository in /path/to/try_mongo/.git/

Adding mongo.cr

> cd try_mongo
try_mongo> cat >> shard.yml 
dependencies:
  mongo:
    github: datanoise/mongo.cr
    branch: master
^D
try_mongo> shards install
Updating https://github.com/datanoise/mongo.cr.git
Installing mongo (master)

Add basic code to try db connect

try_mongo> cat > src/try_mongo.cr 
require "mongo"

client = Mongo::Client.new "mongodb://localhost"
db = client["test"]
collection = db["mongo_try"]
 
puts collection.count
^D

Attempt to build...

try_mongo> crystal build src/try_mongo.cr 
/usr/bin/ld: /opt/crystal/embedded/lib/../lib/libgc.a(os_dep.o): undefined reference to symbol '_end'
//usr/lib/x86_64-linux-gnu/libyajl.so.2: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
Error: execution of command failed with code: 1: `cc -o "/path/to/try_mongo/try_mongo" "${@}"  -rdynamic  -lmongoc-1.0 -lbson-1.0 -lpcre -lgc -lpthread /opt/crystal/src/ext/libcrystal.a -levent -lrt -ldl -L/usr/lib -L/usr/local/lib`

@akzhan
Copy link

akzhan commented May 20, 2017

Looks like author doesn't provide ldflags to the library. Just for example:

@[Link(ldflags: "#{__DIR__}/ext/libcrystal.a")]

@Val
Copy link

Val commented May 20, 2017

@akzhan How do you use this trick on the previous example ?

@akzhan
Copy link

akzhan commented May 20, 2017

@[Link(ldflags: "location of correct library.")] in your crystal shim code (where is link attribute).

@Val
Copy link

Val commented May 22, 2017

@akzhan : seems ldflags are already provided.

> grep -r Link .
./lib/mongo/src/mongo/lib_mongo.cr:@[Link("mongoc-1.0")]
./lib/mongo/src/bson/lib_bson.cr:@[Link("bson-1.0")]

@Val
Copy link

Val commented Jun 1, 2017

Still unable to try mongo.cr, even on Debian stretch (the next stable release), cf. datanoise/mongo.cr#22

@Val
Copy link

Val commented Aug 12, 2017

Found a bug in @[Link(ldflags: "...")], see crystal-lang/crystal#4825

@funny-falcon
Copy link

caught again in Ubuntu 17.10:

$ crystal -v
Crystal 0.23.1 [e2a1389] (2017-07-13) LLVM 3.8.1
$ git log -n 1
commit 007899ac1eebe45043c8350ade85bc62e1783517 (HEAD -> master, origin/master, origin/HEAD)
Author: Julien Portalier <julien@portalier.com>
Date:   Thu Oct 12 14:30:34 2017 +0200

    Fix: always use monotonic clock to measure time
    
    Mostly fixes spec, benchmark and some compiler timings.

$ LANG=C make clean crystal
Using /usr/bin/llvm-config-4.0 [version=4.0.1]
rm -rf .build
rm -rf ./doc
rm -rf src/llvm/ext/llvm_ext.o
rm -rf src/ext/sigfault.o src/ext/libcrystal.a
g++ -c  -o src/llvm/ext/llvm_ext.o src/llvm/ext/llvm_ext.cc `/usr/bin/llvm-config-4.0 --cxxflags`
cc -fPIC    -c -o src/ext/sigfault.o src/ext/sigfault.c
ar -rcs src/ext/libcrystal.a src/ext/sigfault.o
CRYSTAL_CONFIG_PATH=`pwd`/src ./bin/crystal build  -o .build/crystal src/compiler/crystal.cr -D without_openssl -D without_zlib
/usr/bin/ld: /opt/crystal/embedded/lib/../lib/libgc.a(os_dep.o): undefined reference to symbol '_end'
//usr/lib/x86_64-linux-gnu/libffi.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
Error: execution of command failed with code: 1: `cc "${@}" -o '/home/yura/Projects/crystal/.build/crystal'  -rdynamic  /home/yura/Projects/crystal/src/llvm/ext/llvm_ext.o `/usr/bin/llvm-config-4.0 --libs --system-libs --ldflags 2> /dev/null` -lstdc++ -lpcre -lm -lgc -lpthread /home/yura/Projects/crystal/src/ext/libcrystal.a -levent -lrt -ldl -L/usr/lib -L/usr/local/lib`
Makefile:117: recipe for target '.build/crystal' failed
make: *** [.build/crystal] Error 1

@Dan-Do
Copy link

Dan-Do commented Sep 29, 2021

I had the same issue yesterday with other DSO. It seems I have to install the dev library on Ubuntu. My bad I cannot recall what exactly been done :(

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

7 participants