Sponsored Content
Full Discussion: Makefile Mix for C and C++
Top Forums Shell Programming and Scripting Makefile Mix for C and C++ Post 302703097 by DGPickett on Wednesday 19th of September 2012 10:37:05 AM
Old 09-19-2012
When you want to reference C++ variables in C, you must declare them in C using the wrapper "extern C++ { . . . }", even by way of include file #include lines, and vice-versa with "extern C { . . . }". C++ names are mangled to indicate the type returned and, if method/subroutine/function, the number and types of arguments, for stricter type checking. The original C++ compilers were just preprocessors for the C compiler. If you look at some object code (executables and libraries) using nm, you will see the mangled names of C++ identifiers.

Your make rules need to point to different compiler commands and arguments, using different variables, e.g., not swapping CC from gcc to g++. Sometimes it simplifies things if you use a different directory, or ensure even include files have different suffixes for c++. Try not to make whole new compile lines for every file, but just modify a variable referenced in the common line for moving from one extension to the next. If object file order on linking line is getting to be a pain, remember that code is library files, static or dynamic, is not order sensitive. Even main() can be in a library if all the code in the library serves that main. One class per include file and one subroutine/method/class per non-include file, all compiled -c and non-main() .o put in libraries, is a good practice.

Last edited by DGPickett; 09-19-2012 at 11:47 AM..
 

8 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

How to grep mix of numbers and systemdate?

Hi Guys, i'm beginner in UNIX commands, need some help on this simple question: I need to make a shell script to move files to another directory, the criterias are : 1. the range of 4 last digit of the file name is 0100-0199 2. move all files that processed daily (let's say today is... (2 Replies)
Discussion started by: saltshaker
2 Replies

2. AIX

mix fc and tape devices

I have a problem with some partitions. In one of them I have this two fiber channel. lsdev -Cc adapter ent0 Available 03-08 10/100/1000 Base-TX PCI-X Adapter (14106902) fcs0 Available 04-08 FC Adapter fcs1 Available 05-08 FC Adapter ide0 Defined 07-08 ATA/IDE... (0 Replies)
Discussion started by: lo-lp-kl
0 Replies

3. UNIX for Advanced & Expert Users

Makefile problem - How to run module load in a Makefile

Hi, I'm trying to run the module load command in a Makefile and i'm getting the following error: make: module: command not found Why is this? Is there any way to run this command in a Makefile? NOTE: command - module load msjava/sunjdk/1.5.0 works fine outside of the Makefile (2 Replies)
Discussion started by: hernandinho
2 Replies

4. Solaris

ZFS Pool Mix-up

Hi all I plan to install Solaris 10U6 on some SPARC server using ZFS as root pool, whereas I would like to keep the current setup done by VxVM: - 2 internal disks: c0t0d0 and c0t1d0 - bootable root-volume (mirrored, both disks) - 1 non-mirrored swap slice - 1 non-mirrored slices for Live... (1 Reply)
Discussion started by: blicki
1 Replies

5. Shell Programming and Scripting

How to mix the contents of 2 files into a new file?

Hello Everybody! My question is how can I mix for example file_a with file_b in the following method: After 2 lines of file_a put 2 lines from file_b to file_c. For example: file_a: 1 2 3 4 5 6 file_b: 11 22 (7 Replies)
Discussion started by: Levi85
7 Replies

6. Homework & Coursework Questions

Help with Simple Multi-Level Makefile (Extremely New at Makefile)

Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted! 1. The problem statement, all variables and given/known data: Basically, the prompt is make a makefile with various sub makefiles in their respective subdirectories. All code... (1 Reply)
Discussion started by: Tatl
1 Replies

7. Programming

makefile for mix of C and C++ modules

I am trying to come up with a makefile where the target is linked with object files produced by C and C++ sources. My setup is Ubuntu/gcc: $ uname -a Linux srvr1 2.6.24-24-server #1 SMP Fri Sep 18 17:24:10 UTC 2009 i686 GNU/Linux gcc version 4.2.4 $ cat main.cpp #include <iostream>... (6 Replies)
Discussion started by: migurus
6 Replies

8. AIX

Mix LDAP and LOCAL user on AIX

Hello, I'm currently trying to mix local and LDAP users on an AIX 7.1. I've triied many things. My LDAP Server in on a CentOS - OpenLDAP (which works fine with linux). I'm currently stuck on AIX at how to declare LDAP AND Local users. Here's what i did : /usr/sbin/mksecldap -c -h 'ldap03'... (15 Replies)
Discussion started by: AIX_user_324891
15 Replies
Math::Symbolic::Compiler(3pm)				User Contributed Perl Documentation			     Math::Symbolic::Compiler(3pm)

NAME
Math::Symbolic::Compiler - Compile Math::Symbolic trees to Perl code SYNOPSIS
use Math::Symbolic::Compiler; # A tree to compile my $tree = Math::Symbolic->parse_from_string('a^2 + b * c * 2'); # The Math::Symbolic::Variable 'a' will be evaluated to $_[1], etc. my $vars = [qw(b a c)]; my ($closure, $code, $trees) = Math::Symbolic::Compiler->compile($tree, $vars); print $closure->(2, 3, 5); # (b, a, c) # prints 29 (= 3^2 + 2 * 5 * 2) # or: ($closure, $trees) = Math::Symbolic::Compiler->compile_to_sub($tree, $vars); ($code, $trees) = Math::Symbolic::Compiler->compile_to_code($tree, $vars); DESCRIPTION
This module allows to compile Math::Symbolic trees to Perl code and/or anonymous subroutines whose arguments will be positionally mapped to the variables of the compiled Math::Symbolic tree. The reason you'd want to do this is that evaluating a Math::Symbolic tree to its numeric value is extremely slow. So is compiling, but once you've done all necessary symbolic calculations, you can take advantage of the speed gain of invoking a closure instead of evaluating a tree. UNCOMPILED LEFTOVER TREES Not all, however, is well in the land of compiled Math::Symbolic trees. There may occasionally be trees that cannot be compiled (such as a derivative) which need to be included into the code as trees. These trees will be returned in a referenced array by the compile*() methods. The closures will have access to the required trees as a special variable '@_TREES inside the closure's scope, so you need not worry about them in that case. But if you plan to use the generated code itself, you need to supply an array named @_TREES that contains the trees as returned by the compile*() methods in the scope of the eval() you evaluate the code with. Note that you give away all performance benefits compiling the tree might have if the closure contains uncompiled trees. You can tell there are any by checking the length of the referenced array that contains the trees. If it's 0, then there are no trees left to worry about. AVOIDING LEFTOVER TREES In most cases, this is pretty simple. Just apply all derivatives in the tree to make sure that there are none left in the tree. As of version 0.130, there is no operator except derivatives that cannot be compiled. There may, however, be some operators you cannot get rid of this easily some time in the future. If you have problems getting a tree to compile, try using the means of simplification provided by Math::Symbolic::* to get a simpler tree for compilation. EXPORT None by default, but you may choose to import the compile(), compile_to_sub(), and compile_to_code() subroutines to your namespace using the standard Exporter semantics including the ':all' tag. SUBROUTINES
($code, $trees) = compile_to_code($tree, $vars) The compile_to_code() class method takes one mandatory argument which is the Math::Symbolic tree to be compiled. Second argument is optional and an array reference to an array of variable mappings. See "VARIABLE PASSING STYLES" for details on how this works. compile_to_code() returns a string and an array reference. The string contains the compiled Perl code that uses the values stored in @_ as described in the section on positional variable passing. It also accesses a special variable @_TREES if there were any sub-trees (inside the tree that has been compiled) that were impossible to compile. The array reference returned by this method contains any of the aforementioned trees that failed to compile. If there are any such trees that did not compile, you may put them into the @_TREES variable in scope of the eval() that evaluates the compiled code in the same order that they were returned by this method. If you do that, the code will run and determine the value of the tree at run-time. Needless to say, that is slow. ($sub, $trees) = compile_to_sub($tree, $vars) The compile_to_sub() class method takes one mandatory argument which is the Math::Symbolic tree to be compiled. Second argument is optional and an array reference to an array of variable mappings. See "VARIABLE PASSING STYLES" for details on how this works. compile_to_sub() returns a list of two elements, the first being the compiled anonymous subroutine. For details on the second element, please refer to the docs on the compile_to_code() subroutine. ($sub, $code, $trees) = compile($tree, $vars) The compile() class method takes one mandatory argument which is the Math::Symbolic tree to be compiled. Second argument is optional and an array reference to an array of variable mappings. See "POSITIONAL VARIABLE PASSING" for details on how this works. compile() returns a list of three elements, the first being the compiled anonymous subroutine, the second being the compiled code. For details on the second and third elements, please refer to the docs on the compile_to_code() subroutine. VARIABLE PASSING STYLES Currently, the Math::Symbolic compiler only supports compiling to subs with positional variable passing. At some point, the user should be able to choose between positional- and named variable passing styles. The difference is best explained by an example: # positional: $sub->(4, 5, 1); # named: (NOT IMPLEMENTED!) $sub->(a => 5, b => 4, x => 1); With positional variable passing, the subroutine statically maps its arguments to its internal variables. The way the subroutine does that has been fixed at compile-time. It is determined by the second argument to the various compile_* functions found in this package. This second argument is expected to be a reference to an array of variable names. The order of the variable names determines which parameter of the compiled sub will be assigned to the variable. Example: my ($sub) = Math::Symbolic::Compiler->compile_to_sub($tree, [qw/c a b/]); # First argument will be mapped to c, second to a, and third to b # All others will be ignored. $sub->(4, 5, 6, 7); # Variable mapping: a = 5, b = 6, c = 4 One important note remains: if any (or all) variables in the tree are unaccounted for, they will be lexicographically sorted and appended to the variable mapping in that order. That means if you don't map variables yourself, they will be sorted lexicographically. Thanks to Henrik Edlund's input, it's possible to pass a hash reference as second argument to the compile* functions instead of an array reference. The order of the mapped variables is then determined by their associated value, which should be an integer starting with 0. Example: Math::Symbolic::Compiler->compile_to_sub($tree, {b => 2, a => 1, c => 0}); Would result in the order c, a, b. AUTHOR
Please send feedback, bug reports, and support requests to the Math::Symbolic support mailing list: math-symbolic-support at lists dot sourceforge dot net. Please consider letting us know how you use Math::Symbolic. Thank you. If you're interested in helping with the development or extending the module's functionality, please contact the developers' mailing list: math-symbolic-develop at lists dot sourceforge dot net. List of contributors: Steffen Mueller, symbolic-module at steffen-mueller dot net Stray Toaster, mwk at users dot sourceforge dot net Oliver Ebenhoeh SEE ALSO
New versions of this module can be found on http://steffen-mueller.net or CPAN. The module development takes place on Sourceforge at http://sourceforge.net/projects/math-symbolic/ Math::Symbolic perl v5.10.1 2011-01-01 Math::Symbolic::Compiler(3pm)
All times are GMT -4. The time now is 12:48 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy