[aspectc-user] multiple definition errors for "global" variables

Olaf Spinczyk Olaf.Spinczyk at informatik.uni-erlangen.de
Thu Feb 3 21:05:58 CET 2005

Hello Hans,

Hans VB wrote:

> Hello,
> Olaf Spinczyk wrote:
>> the reason is that aspect headers are automatically included in all 
>> translation units, which are affected by the aspect. You would have 
>> the same results if you defined the ofstream in a normal header file, 
>> which you include in more than one cpp file.
>> The solution is to create a "LoggingAspect.cpp" file, which defines 
>> your ofstream logfile("test.log") and includes the aspect header 
>> explicitely. In the aspect header you only have an extern 
>> declaration:extern ofstream logfile;
>> Olaf
> It doesn't give any compiler or weaving errors, but unfortunately, 
> AC++ doesn't seem to go in this LoggingAspect.cpp file. Everything in 
> it is just ignored. It was also the first time I heard of using the 
> .ah-files really just as a header. I'm using the ACDT, could that have 
> something to do with it?
> Greets,
> Hans

I just tried logging to an ofstream (in ACDT) and it worked. Here is my 

#include <stdio.h>

int main () {
    printf ("Hello Hans ;-)");
    return 0;

#ifndef __Trace_ah__
#define __Trace_ah__

#include <fstream>
using namespace std;

extern ofstream out;

aspect Trace {
    pointcut to_trace () = execution ("% main(...)");
    advice to_trace () : around () {
        out << "before " << JoinPoint::signature () << endl;
        tjp->proceed ();
        out << "after " << JoinPoint::signature () << endl;

#endif // __Trace_ah__

--- Trace.cc:
#include "Trace.ah"

ofstream out ("logfile");

I used an ordinary ACDT managed make project. When I run the compiled 
application the logfile is created as expected.

Please check if there is a relevant difference between my example and 
your code.


More information about the aspectc-user mailing list