Very informative answer. I looked back on the examples, and it seems they were building individual object files, as you say. This cleared up my confusion, thanks a million!

On 2/11/2014 2:28 PM, Jukka Jylänki wrote:
The .cpp files are never included by other files (well you could, but by good organization practices they don't). They are the 'starting points' of compilation units, which go on to include headers. Each .cpp file is compiled separately as their own compilation unit, and the results are linked together. You must have somehow confused the examples you looked at - all C++ compilers do this: you pass all the .cpp files to the compiler either via a single "cc a.cpp b.cpp c.cpp -o a.out" directive, or via separate directives that create object files "cc a.cpp -o a.obj;cc b.cpp -o b.obj;cc c.cpp -o c.obj" and then finally combine them together with "cc a.obj b.obj c.obj -o a.out". Visual Studio traditionally uses the suffix .obj for intermediate object files, GCC uses .o, emcc can use either. It is also possible to make more complex build hierarchies by compiling multiple object files to static libraries, and then finally combine the individual static libraries to produce the final executable. Perhaps the examples you were looking at all built individual object files, and therefore only ever called emcc with a single .cpp file at a time?


2014-02-11 20:55 GMT+02:00 Jack Arrington <[email protected] <mailto:[email protected]>>:

    First I should say that I am far from a C++ ninja, and I've only
    compiled a few simple things with emscripten thus far.

    So I have my main.cpp file, and a class called Foo in Foo.h and
    Foo.cpp. main.cpp includes Foo.h and Foo.cpp includes Foo.h, but
    when I compile, I get the error: "warning: unresolved symbol:
    _ZN5FooC1EV". My understanding was that this was the standard way
    of doing things in C++. /However, /when I switch the contents of
    Foo.h and Foo.cpp to a function declaration and implementation,
    respectively, I get no such error. When I change the contents of
    my Makefile from "emcc -g4 src/main.cpp -o out/main.js" to "emcc
    -g4 src/main.cpp src/Foo.cpp -o out/main.js", everything works.
    This makes sense to me, since Foo.cpp is not actually getting
    /included /anywhere in the code. But what confuses me is that all
    the emscripten examples I have read do not seem to do this, and
    code like this works with cl(Microsoft's C++ compiler).

    Did I miss something here? Am I making a dumb mistake? Any help is
    appreciated.(below is posted my code)

    Main.cpp:
      #include <iostream>
      #include <stdio.h>
      #include "Foo.h"

      int main(int argc, char const *argv[])
      {
        Foo f;
        printf("%i\n", f.bar);

        return 0;
      }

    Foo.h:
      #ifndef FOOH
      #define FOOH
      #pragma once

      class Foo
      {
      public:
        Foo();
        ~Foo();
        int bar;
      };

      #endif

    Foo.cpp:
       #include "Foo.h"

      Foo::Foo()
      {
        printf("Hello\n");
        bar = 12;
      }

      Foo::~Foo()
      {

      }

    Makefile:
       emcc -g4 src/main.cpp src/Foo.cpp -o out/main.js
-- You received this message because you are subscribed to the Google
    Groups "emscripten-discuss" group.
    To unsubscribe from this group and stop receiving emails from it,
    send an email to [email protected]
    <mailto:emscripten-discuss%[email protected]>.
    For more options, visit https://groups.google.com/groups/opt_out.


--
You received this message because you are subscribed to a topic in the Google Groups "emscripten-discuss" group. To unsubscribe from this topic, visit https://groups.google.com/d/topic/emscripten-discuss/MeT19yBPseM/unsubscribe. To unsubscribe from this group and all its topics, send an email to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

No virus found in this message.
Checked by AVG - www.avg.com <http://www.avg.com>
Version: 2014.0.4259 / Virus Database: 3697/7084 - Release Date: 02/11/14


--
You received this message because you are subscribed to the Google Groups 
"emscripten-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to