以下是不同的Makefile:
libcds/src:
CPP=g++
CPPFLAGS=-O9 -w -DNDEBUG
INCL=-I../includes/
CODERS_DIR=coders
CODERS_OBJECTS=$(CODERS_DIR)/huff.o $(CODERS_DIR)/huffman_codes.o
STATIC_PERMUTATION_DIR=static_permutation
STATIC_PERMUTATION_OBJECTS=$(STATIC_PERMUTATION_DIR)/perm.o ...
STATIC_BITSEQUENCE_DIR=static_bitsequence
STATIC_BITSEQUENCE_OBJECTS=$(STATIC_BITSEQUENCE_DIR)/static_bitsequence.o ..
STATIC_SEQUENCE_DIR=static_sequence
STATIC_SEQUENCE_OBJECTS=$(STATIC_SEQUENCE_DIR)/static_sequence.o, ..., wt_coder.o
UTILS_DIR=utils
UTILS_OBJECTS=$(UTILS_DIR)/alphabet_mapper_none.o $(UTILS_DIR)/alphabet_mapper.o
%.o: %.cpp
$(CPP) $(CPPFLAGS) $(INCL) -c $< -o $@
all: lib
lib: pre $(CODERS_OBJECTS) $(STATIC_BITSEQUENCE_OBJECTS) $(STATIC_SEQUENCE_OBJECTS) $(UTILS_OBJECTS) $(STATIC_PERMUTATION_OBJECTS)
ar rcs ../lib/libcds.a $(CODERS_OBJECTS) $(STATIC_BITSEQUENCE_OBJECTS) $(STATIC_SEQUENCE_OBJECTS) $(UTILS_OBJECTS) $(STATIC_PERMUTATION_OBJECTS)
pre:
cp basics.h ../includes/
cp */*.h ../includes/
SSA2:
CC=g++
CFLAGS=-w -O9 -DNDEBUG -I../libcds/includes/
CODERS_DIR=../libcds/src/coders
CODERS_OBJECTS=$(CODERS_DIR)/huff.o $(CODERS_DIR)/huffman_codes.o
STATIC_BITSEQUENCE_DIR=../libcds/src/static_bitsequence
STATIC_BITSEQUENCE_OBJECTS=$(STATIC_BITSEQUENCE_DIR)/static_bitsequence.o ...
STATIC_SEQUENCE_DIR=../libcds/src/static_sequence
STATIC_SEQUENCE_OBJECTS=$(STATIC_SEQUENCE_DIR)/static_sequence.o ...
UTILS_DIR=../libcds/src/utils
UTILS_OBJECTS=$(UTILS_DIR)/alphabet_mapper_none.o $(UTILS_DIR)/alphabet_mapper.o
all: index
# pattern rule for all objects files
%.o: %.c *.h
$(CC) -c $(CFLAGS) $< -o $@
%.o: %.cpp *.h
$(CC) -c $(CFLAGS) $< -o $@
index: bitrankw32int.o bitarray.o ds/ds.o ds/globals.o ds/helped.o ds/shallow.o ds/deep2.o ds/blind2.o SSA.o
cp ../libcds/lib/libcds.a SSA.a
ar rcs SSA.a SSA.o bitrankw32int.o bitarray.o ds/ds.o ds/globals.o ds/shallow.o ds/helped.o ds/deep2.o ds/blind2.o
CC=g++ -I $(JAVA_HOME)/include -I $(JAVA_HOME)/include/linux
LD_LIBRARY_PATH=./
JNI_NAME= indexlib
all: test
%.o: %.c *.h
$(CC) -c $(CFLAGS) $< -o $@
test_index:
$(CC) run_queries.c -o testIndex SSA.a
test_index_lib: run_queries.o
ld -shared -soname lib$(JNI_NAME).so -o lib$(JNI_NAME).so run_queries.o SSA.a -lc
(std::basic_ostream>&,char const*,int)U std::__throw_bad_cast()
U std::cout
所以实际上这可能与链接器错误有关:未定义对`std::ctype
我认为您没有链接到C++标准库。您需要它是因为您链接到的库之一是C++。
在第一种情况下(target test_index),一切正常,因为您正在使用g++
进行编译和链接,并且它将隐式链接到libstdc++。在共享库的情况下,您使用ld
链接,它不会隐式链接libstdc++。
您可以使用g++
编译和链接共享库,或者显式地使用-lstdc++
添加libstdc++。两者都应该有效。
问题内容: 两个共享库liba.so和libb.so。liba.so使用libb.so。所有c文件都使用-fPIC编译。链接使用- shared。当我们在liba.so上调用dlopen时,它无法在libb.so中找到符号…我们得到“未定义符号”错误。我们可以dlopen libb.so没有错误。我们知道liba正在找到libb,因为我们没有得到文件未找到错误。删除libb.so时,出现文件未找到
我正在尝试JNI示例代码。 (您可以通过github获得以下所有源代码:https://github.com/pilhoon/jni-test) sample.java sample.c 采样.h 我在CentOS6.3上用gcc编译了这些 但是当我运行'java sample'时,出现了一个错误。 我该怎么解决这个?
问题内容: 这有什么问题吗?我有以下简单的课程: 在运行一个简单的compile()之后,出现以下错误: 在共享库上运行nm表示实际上已找到它: 这是在Ubuntu 12.04上发生的。该 libmnl-dev的 和 libmnl0 包安装。的输出表明正使用该* .so文件: 问题答案: 库必须在使用它们的对象之后列出(更确切地说,仅当库包含满足遇到未定义引用的符号时,才使用库)。将移至命令末尾。
问题内容: 我有一个与静态便利库链接的程序,称为它,其中包含一个函数。该函数未在中的任何地方调用;它需要能够从插件库调用。 该符号未在中动态导出。如果我跑步 我什么都没有。但是,它并不缺少: 00000000 T功能 我使用的是automake,但是如果我在命令行上手动执行最后一个链接,那么它也不起作用: 但是,如果我这样链接程序,则跳过便利库的使用,直接链接到本应直接进入的目标文件,它们会显示在
我用NetBeans编写了一个程序,现在想与我的同事分享。但是,当他尝试在计算机上运行时,他会收到一条错误消息: 让人困惑的是:我在装有NetBeans的笔记本电脑上写了这篇文章,为了确保它能正常工作,我将文件夹复制到闪存驱动器上,然后在我的电脑上运行。它工作得很好。当我把它发电子邮件给我的同事时,他发现了那个错误。 根据我所看到的,一些解决方案是运行。命令行中的jar。虽然这可能会起作用,但我需
我试图加载一个. so文件(libInfExprParser.so)使用JNI。我没有这个共享对象的源代码。我得到以下错误: 线程“main”java中出现异常。lang.unsatifiedlinkerror:/home/tomcat/sahiti/ExprParser/libinfexparser。所以:/home/tomcat/sahiti/ExprParser/libinexprparse