Cool!, I would stick with the -Wno-undefined-var-template solution, libstdc++
on the mac is old and it actually prevents you from using any of the new stuff
in c++11, some of which is a huge improvement.
Just for completeness, the Xcode libstdc++ does have <cstdint> but it’s in the
tr1/ directory which, back then, was the “here’s some new stuff that might get
in the standard”. So to get that you need to include <tr1/cstdint>. Like I
said, I would avoid it though.
google will lead any future stumblers to this thread so I shouldn't worry about
it. I’m sure others on this list who are familiar with cmake could add the
flag. Otherwise when someone using gcc upgrades to one of the newer versions
they will be forced to sort out the forward declaration issue.
Cheers,
- James
> On May 17, 2017, at 7:20 PM, paulcrawfordgm <paulcrawfor...@gmail.com> wrote:
>
> Hi James,
>
> Sorry that I seem so naive on these issues but I have not dealt with anything
> on this scale before and I use “C” only, not “C++” for my project.
>
> That being said, I did find the file “CMakeCache.txt” in the pulseview
> directory and I have edited it to add the flag you suggested,
> -stdlib=libstdc++, to both the compiler and linker. That change definitely
> did clear the error I was getting on variable instantiation but it has also
> introduced a new error: “make” cannot find the header file #include <cstdint>
>
> I did google that and it seems that it is a replacement for <stdint.h> but
> there seem to be some things about it that I should probably not be getting
> into just to build pulseview ;-).
>
> I assume that make is looking for <cstdint> because of going back to the old
> gcc from long ago…
>
> Do you think make would work if I put cstdint in my “include” directory. If
> so, where can I get the file? Or should I try the -Wno-undefined-var-template
> flag now that I know where to put it?
>
> In fact, I did try the “-W” flag only (removed the "-stdlib” flag) and it is
> presently happily compiling.
>
> Not only that it actually works!!
>
> <pulseview.png>
>
> Thank you so much for your patience. How do I need to proceed to ensure that
> my experience here gets into some form within sigrok to help others with the
> same software environment as me?
>
> Best regards,
>
> Paul
>
>> On May 17, 2017, at 15:22, James Burgess <jamesrburg...@mac.com
>> <mailto:jamesrburg...@mac.com>> wrote:
>>
>> Hi Paul,
>>
>> The build is made with cmake which generates the Makefiles for you. Are you
>> not running cmake yourself? That’s where you’d add those compile time
>> options, and then in cmake run “generate” again. If you don’t want to edit
>> source code that’s probably your only option. You can edit the makefiles
>> that cmake creates but if you run cmake’s generate it’ll just overwrite them
>> (hence that warning in the file you mentioned)
>>
>> OK, so Xcode8 still defaults to c++03, I know the date of __cplusplus is
>> oddly set to 1997, this is the "build software by large committee effect" in
>> action :-) c++03 was so similar to c++98 they didn’t change it (I guess),
>> and weirdly c++98 was “blessed" in the spring of 1998 but the change of the
>> define’s value was committed in the winter of 1997. Yuk.
>>
>> Don’t think clang will support any lower values, it will however go into a
>> gcc-from-sometime-ago mode with the following flag to the compile and link
>> lines: -stdlib=libstdc++. This selects a completely different c/c++ runtime
>> that was frozen in time when Apple switched to clang (from gcc). As odd as
>> that sounds it’s still a viable runtime on 10.12. It’s been a long time
>> since I compiled sigrok on a mac and I think that would have been when
>> libstdc++ was the default (the default is clang’s own libc++ now) If I can
>> find my notes on that I’ll post them
>>
>> - James
>>
>>
>>> On May 17, 2017, at 11:28 AM, paulcrawfordgm <paulcrawfor...@gmail.com
>>> <mailto:paulcrawfor...@gmail.com>> wrote:
>>>
>>> Hi James,
>>>
>>> Thank you so much for your quick response.
>>>
>>> This is all running on predefined scripts and I am not sure that I have the
>>> ability to move or split headers.
>>>
>>> I looked at the “Makefile” for Pulseview but could not find in it any -W
>>> options that I could add -Wno-undefined-var-template to to change the
>>> compilation behaviour. Perhaps it is somewhere else that I am not looking
>>> at. For my own project compilations it is obvious where to add the options,
>>> but for Pulseview the Makefile is generated automatically and has the
>>> warning not to edit it so the options presumably come from somewhere else.
>>> Perhaps you can enlighten me on that...
>>>
>>> I am using Xcode 8.3.2 and the command line tools for that version.
>>>
>>> When I executed:
>>> sh-3.2# clang++ -dM -c -E -x c++ - </dev/null | grep cplusplus
>>> #define __cplusplus 199711L
>>>
>>> it appears that __cplusplus is already defined to 199711L. I did also use
>>> the -std flag to change that and got the same as you showed:
>>>
>>> sh-3.2# clang++ -dM -c -E -x c++ -std=c++11 - </dev/null | grep cplusplus
>>> #define __cplusplus 201103L
>>>
>>> but when I did “make" again the same error was there. I also found that
>>> using -std=c++03 results in #define __cplusplus 199711L
>>>
>>> What would the -std flag value be to go even lower in dates, or would that
>>> be dangerous for other reasons?
>>>
>>> Thanks again,
>>>
>>> Paul
>>>
>>>
>>>> On May 17, 2017, at 12:55, James Burgess <jamesrburg...@me.com
>>>> <mailto:jamesrburg...@me.com>> wrote:
>>>>
>>>> Hi Paul,
>>>>
>>>> My guess would be that in modern C++ the rules about template definitions
>>>> have been significantly tightened and clang is generally more strict than,
>>>> say, gcc about most of the new rules. The rule in question (I think) is
>>>> that you can no longer define a template whose parameter types are forward
>>>> declared. Previously this was ok as long as you didn’t instantiate the
>>>> template until the parameter types were fully defined.
>>>>
>>>> Sometimes this can be resolved just be including the headers for the
>>>> forward declared type ahead of the template definition (to make it fully
>>>> defined). Sometimes this won’t work if the headers are structured in a way
>>>> to take advantage of the old behavior. An example would be someone has
>>>> used a forward declaration to reduce the header file dependency on some
>>>> type, then it can get tricky. I’ve found I’ve had to split headers to
>>>> resolve those kinds of problems.
>>>>
>>>> The other thing you could try is adding -Wno-undefined-var-template to the
>>>> compile line, most (all?) of the clang options have the negation by adding
>>>> "no-“ in front of them.
>>>>
>>>> Another is, you didn’t say which Xcode you are using, likely 8 given
>>>> you’re on 10.12, the default I think is -std=c++11, you might try
>>>> something lower. Xcode7 defaults to c++03, which you can determine with
>>>> this command (this is Xcode7):
>>>>
>>>> jrb# clang++ -dM -c -E -x c++ - </dev/null | grep cplusplus
>>>> #define __cplusplus 199711L
>>>>
>>>> Here’s how you use the -std flag to change that:
>>>>
>>>> jrb# clang++ -dM -c -E -x c++ -std=c++11 - </dev/null | grep cplusplus
>>>> #define __cplusplus 201103L
>>>>
>>>> (c++03 decided to not change the date to 2003, who knows why ;-)
>>>>
>>>> Hope that helps,
>>>>
>>>> - James
>>>>
>>>>
>>>>
>>>>> On May 17, 2017, at 9:04 AM, paulcrawfordgm <paulcrawfor...@gmail.com
>>>>> <mailto:paulcrawfor...@gmail.com>> wrote:
>>>>>
>>>>> Hi,
>>>>>
>>>>> I am attempting to build Pulseview in MacOS 10.12.5. When I do “$ make” I
>>>>> get an error:
>>>>>
>>>>> [ 2%] Building CXX object CMakeFiles/pulseview.dir/main.cpp.o
>>>>> In file included from /Users/paulcrawford/pulseview/main.cpp:25:
>>>>> /usr/local/Cellar/libsigrok/HEAD-64f628b/include/libsigrokcxx/libsigrokcxx.hpp:969:20:
>>>>> error: instantiation of variable 'sigrok::EnumValue<sigrok::LogLevel,
>>>>> sr_loglevel>::_values' required
>>>>> here, but no definition is available
>>>>> [-Werror,-Wundefined-var-template]
>>>>> const auto pos = _values.find(static_cast<Enum>(id));
>>>>> ^
>>>>> /Users/paulcrawford/pulseview/main.cpp:118:45: note: in instantiation of
>>>>> member function 'sigrok::EnumValue<sigrok::LogLevel, sr_loglevel>::get'
>>>>> requested here
>>>>>
>>>>> context->set_log_level(sigrok::LogLevel::get(loglevel));
>>>>> ^
>>>>> /usr/local/Cellar/libsigrok/HEAD-64f628b/include/libsigrokcxx/libsigrokcxx.hpp:990:57:
>>>>> note: forward declaration of template entity is here
>>>>> static const std::map<const Enum, const Class * const> _values;
>>>>> ^
>>>>> /usr/local/Cellar/libsigrok/HEAD-64f628b/include/libsigrokcxx/libsigrokcxx.hpp:969:20:
>>>>> note: add an explicit instantiation declaration to suppress this warning
>>>>> if
>>>>> 'sigrok::EnumValue<sigrok::LogLevel, sr_loglevel>::_values' is
>>>>> explicitly instantiated in another translation unit
>>>>> const auto pos = _values.find(static_cast<Enum>(id));
>>>>> ^
>>>>> 1 error generated.
>>>>> make[2]: *** [CMakeFiles/pulseview.dir/main.cpp.o] Error 1
>>>>> make[1]: *** [CMakeFiles/pulseview.dir/all] Error 2
>>>>> make: *** [all] Error 2
>>>>>
>>>>> Can anyone advise on how to correct this error.
>>>>>
>>>>> Thanks for any help.
>>>>>
>>>>> Paul Crawford
>>>>> ------------------------------------------------------------------------------
>>>>> Check out the vibrant tech community on one of the world's most
>>>>> engaging tech sites, Slashdot.org <http://slashdot.org/>!
>>>>> http://sdm.link/slashdot_______________________________________________
>>>>> <http://sdm.link/slashdot_______________________________________________>
>>>>> sigrok-devel mailing list
>>>>> sigrok-devel@lists.sourceforge.net
>>>>> <mailto:sigrok-devel@lists.sourceforge.net>
>>>>> https://lists.sourceforge.net/lists/listinfo/sigrok-devel
>>>>> <https://lists.sourceforge.net/lists/listinfo/sigrok-devel>
>>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Check out the vibrant tech community on one of the world's most
>>> engaging tech sites, Slashdot.org <http://slashdot.org/>!
>>> http://sdm.link/slashdot_______________________________________________
>>> <http://sdm.link/slashdot_______________________________________________>
>>> sigrok-devel mailing list
>>> sigrok-devel@lists.sourceforge.net
>>> <mailto:sigrok-devel@lists.sourceforge.net>
>>> https://lists.sourceforge.net/lists/listinfo/sigrok-devel
>>> <https://lists.sourceforge.net/lists/listinfo/sigrok-devel>
>>
>
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
sigrok-devel mailing list
sigrok-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sigrok-devel