oyao at andrew.cmu.edu
2014-Mar-10 15:30 UTC
[LLVMdev] Shared library not building with any symbols
Hi everyone, I'm running into an issue when building a library that's shared by several of our IR passes. We have our project structured as directed on the llvm projects documentation page (http://llvm.org/docs/Projects.html). We have our IR passes and the shared library, CFIUtil, under the project_src/lib directory (project_src/lib/CFIUtil/). Our shared library has the following Makefile: LEVEL = ../../ LIBRARYNAME=CFIUtil BUILD_ARCHIVE := 1 SHARED_LIBRARY := 1 include $(LEVEL)/Makefile.common Our build is in project_src/build, and we have configured it according to documentation. When running make in the build directory, we get the following warning: ... llvm[2]: Linking Release+Debug+Asserts Shared Library libCFIUtil.dylib llvm[2]: Building Release+Debug+Asserts Archive Library libCFIUtil.a ranlib: file: /Users/oulinyao/Desktop/MSISTM/CFI/project/boeing-cfi/llvm-cfi/build/Release+Debug+Asserts/lib/libCFIUtil.a(CFILowering.o) has no symbols ranlib: warning for library: /Users/oulinyao/Desktop/MSISTM/CFI/project/boeing-cfi/llvm-cfi/build/Release+Debug+Asserts/lib/libCFIUtil.a the table of contents is empty (no object file members in the library define global symbols) llvm[2]: Compiling main.c for Release+Debug+Asserts build ... Which leads to the following error when running our IR passes: ... dyld: lazy symbol binding failed: Symbol not found: __ZN3cfi11CFILoweringC1ERN4llvm6ModuleE Referenced from: ../build/Release+Debug+Asserts/lib/LLVMSuperGraph.dylib Expected in: flat namespace ... We found the following discussion of a similar issue: http://lists.cs.uiuc.edu/pipermail/llvmdev/2011-January/037465.html. However making the same changes to our makefiles didn't seem to do anything. Any help debugging this issue is greatly appreciated. I'm running on Mac OSX version 10.8.5, and I have no problems building/running IR passes that do not use a shared library. Thanks! Oulin Yao