Build error juce_dll demo project


#1

Got a build error when building the jucedll.jucer project with MS VS 2012.

I just downloaded the latest JUCE version from GitHub some minutes ago, added a new VS 2012 target with default settings and started the build process. For both, debug and release version I got the following error message.

g:\e-projekte\e1001_slayer\entwicklung\workingcopy\jucetest\jucetest\juce-master\modules\juce_core\memory/juce_ContainerDeletePolicy.h(48): error C2248: "juce::URL::Upload": Kein Zugriff auf private struct, dessen Deklaration in der juce::URL-Klasse erfolgte. (..\..\..\..\modules\juce_core\juce_core.cpp)
1>          g:\e-projekte\e1001_slayer\entwicklung\workingcopy\jucetest\jucetest\juce-master\modules\juce_core\network/juce_URL.h(353): Siehe Deklaration von 'juce::URL::Upload'
1>          g:\e-projekte\e1001_slayer\entwicklung\workingcopy\jucetest\jucetest\juce-master\modules\juce_core\network/juce_URL.h(41): Siehe Deklaration von 'juce::URL'
1>          g:\e-projekte\e1001_slayer\entwicklung\workingcopy\jucetest\jucetest\juce-master\modules\juce_core\memory/juce_ContainerDeletePolicy.h(47): Bei der Kompilierung der  Klassen-template der void juce::ContainerDeletePolicy<ObjectType>::destroy(ObjectType *)-Memberfunktion
1>          with
1>          [
1>              ObjectType=juce::URL::Upload
1>          ]
1>          g:\e-projekte\e1001_slayer\entwicklung\workingcopy\jucetest\jucetest\juce-master\modules\juce_core\containers/juce_ReferenceCountedArray.h(892): Siehe Verweis auf die Instanziierung der gerade kompilierten Funktions-template "void juce::ContainerDeletePolicy<ObjectType>::destroy(ObjectType *)".
1>          with
1>          [
1>              ObjectType=juce::URL::Upload
1>          ]
1>          g:\e-projekte\e1001_slayer\entwicklung\workingcopy\jucetest\jucetest\juce-master\modules\juce_core\containers/juce_ReferenceCountedArray.h(892): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template "juce::ContainerDeletePolicy<ObjectType>".
1>          with
1>          [
1>              ObjectType=juce::URL::Upload
1>          ]
1>          g:\e-projekte\e1001_slayer\entwicklung\workingcopy\jucetest\jucetest\juce-master\modules\juce_core\containers/juce_ReferenceCountedArray.h(890): Bei der Kompilierung der  Klassen-template der void juce::ReferenceCountedArray<ObjectClass>::releaseObject(ObjectClass *)-Memberfunktion
1>          with
1>          [
1>              ObjectClass=juce::URL::Upload
1>          ]
1>          g:\e-projekte\e1001_slayer\entwicklung\workingcopy\jucetest\jucetest\juce-master\modules\juce_core\containers/juce_ReferenceCountedArray.h(562): Siehe Verweis auf die Instanziierung der gerade kompilierten Funktions-template "void juce::ReferenceCountedArray<ObjectClass>::releaseObject(ObjectClass *)".
1>          with
1>          [
1>              ObjectClass=juce::URL::Upload
1>          ]
1>          g:\e-projekte\e1001_slayer\entwicklung\workingcopy\jucetest\jucetest\juce-master\modules\juce_core\network/juce_URL.h(363): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template "juce::ReferenceCountedArray<ObjectClass>".
1>          with
1>          [
1>              ObjectClass=juce::URL::Upload
1>          ]

Unfortunately it's in German and I cannot changed to Englisch in VS Express edition, but the basic error message is "No access to private struct..."

Unfortunately I'm absolutly new to JUCE and I have no clue where to start finding the root cause, so I would highly appreciate some help ;-)

Please let me know, if I could provide some more info for solving the problem. Thanks

EDIT:

Building the Introjucer project was no problem.

 


#2

This should be ok now if you pull again.

But if you're new to juce, please avoid the DLL build unless you really need to use it for some specific purpose. I never use it myself and rarely test it (hence compiler wierdnesses like this can creep in). It's really just kept around because a few people have very specific requirements where they need to use a DLL, but it's not an approach I'd recommend.


#3

Thanks for the quick reply jules. It works now.

I'm currently evaluating the audio portion of the JUCE lib for a cross platform project that's mainly based on Qt (Qt Creator is used as IDE). Building a JUCE DLL and integrating it to the project seemed the best solution to me. Do you agree or do you think there's a better way to do that?

By the way, I'm really impressed of the great work you have done! It seems that JUCE is the lib I was searching for quite a long time.   

 


#4

Glad you like it!

Just to clarify: the juce_dll project is not what you want. It builds a juce.dll that contains all the juce implementation code, so that you can write an app which includes the juce headers, and which then loads this juce.dll (which you have to install alongside your app). A bit like the way Qt does it. Personally I hate this way of organising a project, and could rant for a long time about why it's bad, but some people insist on structuring their code like that, which is why the repo still contains that juce_dll stuff!

The best plan if you want to build a DLL is to use the introjucer to create a new project, and choose "dynamic library" as the type. That'll create a project that builds a self-contained DLL containing all the juce source code + all your own code. You can then export your own functions/classes from that DLL and call them from inside your existing app, but it keeps all the juce source code contained entirely within the DLL.


#5

Aha. Got it. Thank's for your efforts!