Je SOLVED CE NUMÉRO PAR MOI-MÊMEC++ Wrapper pour la bibliothèque C comme bibliothèque partagée
Le problème est le lien de la bibliothèque. J'ai copié le libmywrapper.so (i rebaptisèrent) fichier dans/usr/lib et lié à -mywrapper Que c'est :-)
Original post:
J'écris une bibliothèque wrapper qui permet d'appeler des fonctions C++ à partir de C-code. Unfortnuately il ne lie pas ...
wrapper.h:
#ifdef __cplusplus
extern "C"
{
#endif
extern char* (keygen)();
#ifdef __cplusplus
}
#endif
wrapper.cpp:
#include "wrapper.h"
#include <someincludes>
char* keygen()
{
urandom u;
Makefile:
TARGET := ./mywrapperlib.so
CXXFLAGS := -fPIC -shared -g -Wall -std=c++0x -I../someincludes -I.
CXX := g++
LIB := -lsomelibs
EXT := cpp
BUILDDIR := build
override BUILDDIR := $(strip $(BUILDDIR))
SOURCES := $(wildcard *.$(EXT))
OBJECTS := $(patsubst %.$(EXT), $(BUILDDIR)/%.o, $(SOURCES))
DEPS := $(patsubst %.$(EXT), $(BUILDDIR)/%.dep, $(SOURCES))
.PHONY: all
all: $(TARGET)
$(TARGET): $(OBJECTS) $(DEPS)
$(CXX) $(CXXFLAGS) -o $(TARGET) $(OBJECTS) $(LIBS)
ifneq ($(MAKECMDGOALS), clean)
-include $(DEPS)
endif
$(OBJECTS): $(BUILDDIR)/%.o: %.$(EXT) $(BUILDDIR)/%.dep $(BUILDDIR)/.tag
$(CXX) $(CXXFLAGS) -c $< -o [email protected]
$(DEPS): $(BUILDDIR)/%.dep: %.$(EXT) $(BUILDDIR)/.tag
mkdir -p $(dir $(@))
$(CXX) $(CXXFLAGS) -MM $< -MT [email protected] -MT $(<:.$(EXT)=.o) -o [email protected]
%.tag:
mkdir -p $(dir $(@))
touch [email protected]
.PHONY: clean
clean:
$(RM) -r $(BUILDDIR)
Un fichier de test qui devrait utiliser la bibliothèque: test.c:
#include <wrapper.h>
int main()
{
char* test = keygen();
}
Lorsque je tente de le compiler avec
gcc -o test.a -g -Iinclude -Llib/mywrapperlib.so test.c
Je reçois
/tmp/ccB9bEot.o: In function `main':
/some/paths/test.c:7: undefined reference to `keygen'
Im très inexpérimentée avec le mélange C++ C & code et l'écriture des bibliothèques. Maintenant im coincé et j'espère que quelqu'un peut m'aider avec ce problème.
EDIT:
J'ai vérifié le répertoire lib avec nm:
nm lib/cryptdbwrapperlib.so | grep keygen
0000000000006935 T keygen
Donc, je suppose que le problème est le lien ...
Le titre de la question avait-il un sens lorsque vous l'avez écrit? ;) – jalf
C'est * bibliothèques * –
Yo, dawg ....... –