2012-03-30 55 views
5

he seguido estrictamente esta documentación para instalar y utilizar la biblioteca jsoncpp en mi proyecto: jsoncpp README¿Cómo usar JSON-CPP?

Pero todavía tengo este problema con mi compilación:

g++ -W -Wall -Werror -c -o src/ModConnection.o src/ModConnection.cpp src/ModConnection.cpp:15:23: fatal error: json/json.h: No such file or directory compilation terminated.

Es sucede cuando estoy tratando de usar #include <json/json.h>

Aquí es mi MAKE Linux:

CXX  =  g++ 
NAME =  bin/server 
SRCS =  ./src/ModConnection.cpp\ 
       ./src/unixNetwork.cpp 
OBJS =  $(SRCS:.cpp=.o) 
CXXFLAGS +=  -W -Wall -Werror 
LDFLAGS =  -L ./src/jsoncpp-src-0.5.0/buildscons/linux-gcc4.5.1/src/lib_json/libjson_linux-gcc-4.5.1_libmt.a -I src/jsoncpp-src-0.5.0/include 
RM  =  rm -f 
$(NAME) :  $(OBJS) 
$(CXX) $(LDFLAGS) -o $(NAME) $(OBJS) 

all  :  $(NAME) 

clean : 
       $(RM) $(OBJS) 

fclean :  clean 
       $(RM) $(NAME) 

re  :  fclean all 

.PHONY :  all clean fclean re 

Gracias para tu ayuda

+0

La sección "Creación/Prueba" (del archivo README al que se ha vinculado) le indica que use 'python scons.py platform = your-platform-here' para compilar la biblioteca, pero muestra' Makefile' . ¿El script de compilación que publicaste para tu aplicación o para la biblioteca 'jsoncpp'? –

Respuesta

3

Está especificando el directorio de inclusión de jsoncpp en su variable LDFLAGS, pero no se utilizan hasta que haya compilado los archivos cpp individuales. Debe colocar la parte -I src/jsoncpp-src-0.5.0/include en algún lugar de los indicadores que se agregan a las líneas de compilación, como CXXFLAGS.

Para expandir un poco, está utilizando reglas implícitas Crear para crear sus archivos individuales .cpp, luego tiene un objetivo específico para construir su aplicación fuera de esos objetos.

Véase el GNU Make Catalog of Rules para obtener más información, pero el que usted está utilizando está aquí:

Compiling C++ programs n.o is made automatically from n.cc, n.cpp, or n.C with a recipe of the form $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c . We encourage you to use the suffix ‘.cc’ for C++ source files instead of ‘.C’.

Editar: Ahora para sus errores de enlace.

Obtiene estos problemas porque el vinculador no puede encontrar las implementaciones reales de las funciones a las que llama.

Primero, su directiva -L necesita apuntar a una carpeta, no a una biblioteca. -L establece una ruta de búsqueda para las bibliotecas. Debe establecerse en la carpeta donde se creó la biblioteca de la compilación jsoncpp. A continuación, debe vincular la biblioteca en sí. El nombre de la biblioteca es gigantesco, pero agregar -l json_linux-gcc-4.5.1_libmt a LDFLAGS debería hacer el truco. -l (que es ell inferior) establece una biblioteca real para vincular.

+0

Hola Andre, he usado el script scons.py para compilar con el objetivo 'CHECK' y todo está bien con building + testing. Es mi propio MAKEFILE. –

+0

Hola Collin, he puesto las líneas -I en mis CXXFLAGS y aquí hay algunos errores nuevos que obtengo: ' ./src/ModConnection.o: en la función' main ': ModConnection.cpp :(. Text + 0x16): referencia indefinida a 'Json :: Value :: Value (Json :: ValueType) ' ' –

+0

Ahora, no tengo ningún error con mi compilación ya que he seguido los consejos de Collins Hockey, pero cuando lo hago' Estoy escribiendo esto en mi programa principal: 'Json :: Value root;' Siempre obtengo este error: 'ModConnection.cpp :(. text + 0x16): referencia no definida a' Json :: Value :: Value (Json :: ValueType) ' ModConnection.cpp :(. Text + 0x27): referencia indefinida a 'Json :: Value :: ~ Value()'' –