Boost.signal



  • Ich habe ein Problem mit Boost.signal:

    Ich habe ein einfaches Bsp aus dem zugehörigen Boost Tutorial versucht bei mir zum laufen zu bringen.

    struct HelloWorld 
    
    #include <boost/signals.hpp>
    #include <iostream>
    
    {
      void operator()() const 
      { 
        std::cout << "Hello, World!" << std::endl;
      } 
    };
    
    int main(){
    
    // Signal with no arguments and a void return value
    boost::signal<void ()> sig;
    
    // Connect a HelloWorld slot
    HelloWorld hello;
    sig.connect(hello);
    
    // Call all of the slots
    sig();
    }
    

    http://www.boost.org/doc/libs/1_36_0/doc/html/signals/tutorial.html#id3469972

    Bei dem Versuch das zu builden bekomme ich immer die Fehlermeldung:

    undefined reference to `boost::signals::connection::~connection()'

    Hat jemand eine idee, was da schief läuft?

    Gruß Nic



  • Die includes stehen natürlich über dem struct


  • Administrator

    Hast du auch die Boost.Signal Lib gelinkt? Boost.Signal ist eine von zwölf Bibliotheken in Boost, welche nicht nur aus Headern besteht:
    http://www.boost.org/doc/libs/1_38_0/more/getting_started/windows.html#header-only-libraries

    Grüssli



  • Vielen Dank für die Antwort...

    Ich arbeite mit eclipse. Nachdem ich mit bjam die libs gebuildet habe, habe ich diese versucht zu linken:

    Das generierte Makefile sah dann so aus:

    ################################################################################
    # Automatically-generated file. Do not edit!
    ################################################################################
    
    -include ../makefile.init
    
    RM := rm -rf
    
    # All of the sources participating in the build are defined here
    -include sources.mk
    -include subdir.mk
    -include objects.mk
    
    ifneq ($(MAKECMDGOALS),clean)
    ifneq ($(strip $(C++_DEPS)),)
    -include $(C++_DEPS)
    endif
    ifneq ($(strip $(C_DEPS)),)
    -include $(C_DEPS)
    endif
    ifneq ($(strip $(CC_DEPS)),)
    -include $(CC_DEPS)
    endif
    ifneq ($(strip $(CPP_DEPS)),)
    -include $(CPP_DEPS)
    endif
    ifneq ($(strip $(CXX_DEPS)),)
    -include $(CXX_DEPS)
    endif
    ifneq ($(strip $(C_UPPER_DEPS)),)
    -include $(C_UPPER_DEPS)
    endif
    endif
    
    -include ../makefile.defs
    
    # Add inputs and outputs from these tool invocations to the build variables 
    
    # All Target
    all: SigSlot
    
    # Tool invocations
    SigSlot: $(OBJS) $(USER_OBJS)
    	@echo 'Building target: $@'
    	@echo 'Invoking: GCC C++ Linker'
    	g++ -L/usr/local/boost_1_38_0/bin.v2 -o"SigSlot" $(OBJS) $(USER_OBJS) $(LIBS)
    	@echo 'Finished building target: $@'
    	@echo ' '
    
    # Other Targets
    clean:
    	-$(RM) $(OBJS)$(C++_DEPS)$(C_DEPS)$(CC_DEPS)$(CPP_DEPS)$(EXECUTABLES)$(CXX_DEPS)$(C_UPPER_DEPS) SigSlot
    	-@echo ' '
    
    .PHONY: all clean dependents
    .SECONDARY:
    
    -include ../makefile.targets
    

    Nun bin ich mir nicht sicher, ob ich beim linken einen Fehler gemacht habe, oder etwas anderes falsch gelaufenb ist. Auf jeden Fall bekomme ich die gleiche Fehlermeldung...

    Nic



  • Habe das Problem gelöst... Es hat tatsächlich an den Linker-Optionen gehangen. Vielen Dank für die Hilfe!



  • You must link with the boost_signals library (e.g. g++ -oprogram main.cpp -lboost_signals).

    Leider spreche ich kein Deutsch. 😞


Anmelden zum Antworten