You can subscribe to this list here.
| 2008 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(3) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2009 |
Jan
|
Feb
|
Mar
(2) |
Apr
(6) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2010 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
|
Nov
|
Dec
|
| 2012 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(2) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2013 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(3) |
Sep
|
Oct
|
Nov
|
Dec
|
| 2014 |
Jan
(6) |
Feb
(28) |
Mar
(27) |
Apr
(28) |
May
|
Jun
(6) |
Jul
(3) |
Aug
|
Sep
|
Oct
(2) |
Nov
|
Dec
|
| 2015 |
Jan
(2) |
Feb
|
Mar
|
Apr
|
May
|
Jun
(2) |
Jul
(13) |
Aug
|
Sep
|
Oct
|
Nov
(5) |
Dec
|
| 2016 |
Jan
|
Feb
(2) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(3) |
| 2018 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(6) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2019 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(10) |
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
(2) |
Nov
|
Dec
|
| 2021 |
Jan
(9) |
Feb
|
Mar
|
Apr
|
May
(2) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2023 |
Jan
|
Feb
|
Mar
(3) |
Apr
|
May
(2) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2024 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2025 |
Jan
|
Feb
|
Mar
|
Apr
(2) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: Martin F. <mar...@un...> - 2019-05-20 12:24:03
|
Hi Michael, thanks for your patience. Dalal, Michael (ARC-TI)[SGT, INC] schrieb am 17.05.2019 um 22:12: > From the link I cannot tell exactly what part of the documentation > page you refer to, but I don't see any mention of a failed command > implicitly causing a plan, or even just the command node, to fail. As > I explained in my previous message, you need to code the desired > logic explicitly. The PLEXIL you've given above probably needs at > least a few more lines of code, and maybe an additional node, to do > what you want. OK, it seems this proofpoint stuff broke the link. I was referring to the wiki page "Plexil_Reference" section "Sequence" where it says: > If any action fails (i.e. terminates with status FAILURE), the > Sequence also terminates with status FAILURE. Therefore I was thinking that sending COMMAND_FAILED would be sufficient to terminate the sequence with FAILURE. Seems it is not. :-) > A typical pattern used for commanding in PLEXIL has you issue the > command, give the command sufficient time to complete (either with > or without blocking your plan), and check the command handle for > values of interest, e.g. success, failure, denial. Putting these > checks in a check condition (pre, post, invariant) can fail the node > if that's the desired behavior. There is one convenience form for > synchronous commanding: > > http://plexil.sourceforge.net/wiki/index.php/Plexil_Reference#Synchronous_Command OK, the second code block in Resource_Model#Command_Handles was very helpful. I thought this was relevant only when using resources. Now my plan is: Command load_waypoints(String filename); LoadMission : { { PostCondition Self.command_handle == COMMAND_SUCCESS; load_waypoints("file.name"); } } Which works as expected if I don't send COMMAND_SENT_TO_SYSTEM in my command execution. If I do, the section is left before the command finishes and it always fails. How to handle this? When I write SynchronousCommand load_waypoints("file.name"); instead, I get an error message from plexilexec: > ERROR: failtest.ple:13:1: createExpression: Node BLOCK__0 is not a > Command node ExecApplication::addPlan: Plan parser error: > createExpression: Node BLOCK__0 is not a Command node > Please let us know if you run into further difficulty. We'll try to > improve the Command documentation based on your feedback. Thanks, I will. If you improve the documentation based on my lack of understanding you will have the best documentation ever ;-) Best, Martin |
|
From: Dalal, M. (ARC-TI)[S. INC] <mic...@na...> - 2019-05-17 20:12:14
|
Hi Martin,
Sorry for the delay in finishing my reply to your last message. Continuing from where I left off, more comments are inserted below.
Given this plan:
Command load_waypoints(String filename);
Mission :
{
LoadMission :
{
load_waypoints("file.name");
}
}
When I call
m_execInterface.handleCommandAck(param->cmd, PLEXIL::COMMAND_FAILED);
in the processing of the command, I would expect the whole plan to fail
according to
https://plexil.sourceforge.net_wiki_index.php_Plexil-5FReference-23Sequence&d=DwICaQ&c=ApwzowJNAKKw3xye91w7BE1XMRKi2LN9kiMk5Csz9Zk&r=3RPlkbNjA8D3xIf1Vj4LFPB-ACVxisyJiIhiKWpVwas&m=mCY5O-Liv-jFn6fAGi4IOo5v8z6pGvVGTyGpBYAY-Lk&s=BB0JqgNqXCdL7RFeNm3nR7EmyVPIvmCNHuw1AbhLGYQ&e=
But the debug output of plexilexec is:
[snip]
What did I do wrong?
From the link I cannot tell exactly what part of the documentation page you refer to, but I don't see any mention of a failed command implicitly causing a plan, or even just the command node, to fail. As I explained in my previous message, you need to code the desired logic explicitly. The PLEXIL you've given above probably needs at least a few more lines of code, and maybe an additional node, to do what you want.
A typical pattern used for commanding in PLEXIL has you issue the command, give the command sufficient time to complete (either with or without blocking your plan), and check the command handle for values of interest, e.g. success, failure, denial. Putting these checks in a check condition (pre, post, invariant) can fail the node if that's the desired behavior. There is one convenience form for synchronous commanding:
http://plexil.sourceforge.net/wiki/index.php/Plexil_Reference#Synchronous_Command
Please let us know if you run into further difficulty. We'll try to improve the Command documentation based on your feedback.
Best,
Mike
|
|
From: Dalal, M. (ARC-TI)[S. INC] <mic...@na...> - 2019-05-15 23:56:09
|
Hi Martin,
Please see comments inserted...
When I call
m_execInterface.handleCommandAck(cmd, PLEXIL::COMMAND_SENT_TO_SYSTEM);
the command is transitioning to FINISHED (through FINISHING and
ITERATION_ENDED) immediately with outcome SUCCESS.
Do I have to do / change something with cmd first?
There's sharp distinction between state of the *command* and the state of its *command node*. The node finishes as soon as the command is acknowledged, with any status (command handle). By default, any node finishes with SUCCESS. A node fails only if a relevant check condition (precondition, postcondition, invariant) fails. I suspect you need check conditions to get the behavior you're after. In particular, conditions that check the command handles.
> Is it correct to start a new thread in my
> executeCommand, return and then call handleCommandAck when the new
> thread finishes?
>
> Sure, that's fine, and you can return additional command handles, as well as the return value, if there is one, as they become available. The plan should monitor for, and handle these, as needed. In some cases, it may not care.
What does "additional command handles" mean? Calling handleCommandAck
with the original Command* and different CommandHandleValues?
Yes. Command handles can come in sequence, asychnronously, to the plan, and this is typical, because a command can take time to execute, while the plan is still running. You need to start nodes after the command node that started the command to check for subsequent handles returned by the system.
> What exactly is the second parameter in handleCommandAck? It seems to
> make no difference.
>
> It must be of the valid command handle values, listed here: https://urldefense.proofpoint.com/v2/url?u=http-3A__plexil.sourceforge.net_wiki_index.php_Resource-5FModel&d=DwICaQ&c=ApwzowJNAKKw3xye91w7BE1XMRKi2LN9kiMk5Csz9Zk&r=3RPlkbNjA8D3xIf1Vj4LFPB-ACVxisyJiIhiKWpVwas&m=mCY5O-Liv-jFn6fAGi4IOo5v8z6pGvVGTyGpBYAY-Lk&s=nm7zBd3bJnjd4Z_RsXIONb1Ap2LtpV8OlSDbOHmV-04&e=
>
> It may not make a difference if the PLEXIL plan doesn't check for the handle you are sending.
>
> How can I signal that a command failed?
>
> Use the COMMAND_FAILED handle.
I tried that and it seems not to work or I misinterpret the output.
Sending the failure handle itself won't have any effect on your plan, because PLEXIL is indifferent. The appropriate condition needs definition, to take action on the failure handle, e.g. fail your plan.
I'll reply further tomorrow...
best,
Mike
|
|
From: Dalal, M. (ARC-TI)[S. INC] <mic...@na...> - 2019-05-14 23:07:46
|
Hi Martin,
You're on the right track. I'm sorry that the documentation is not clear enough to answer all your questions, which are good ones. Comments inserted...
What I understood (maybe correctly?):
When the SampleAdapter receives a command it processes the command in
executeCommand, calls m_execInterface.handleCommandAck(cmd,
COMMAND_SENT_TO_SYSTEM); and if no return value is needed informs about
the event with m_execInterface.notifyOfExternalEvent();
As long as executeCommand is running, the plan execution is stopped.
According to
https://plexil.sourceforge.net_wiki_index.php_Plexil-5FReference-23Asynchronous-5Fcommand-5Fexecution&d=DwICAg&c=ApwzowJNAKKw3xye91w7BE1XMRKi2LN9kiMk5Csz9Zk&r=3RPlkbNjA8D3xIf1Vj4LFPB-ACVxisyJiIhiKWpVwas&m=quOopjSuqGtguYzK6z4Hn8_TjdjSVYm8M06kyV9WYLo&s=6KrXTMsSxjyzm2F5DgOo3qKi8KlzZaZEoX9vpBUaUn4&e=
it waits for the acknowledgement.
Correct.
How do I prevent blocking?
Have executeCommand return immediately very quickly, AND return some command handle using handleCommandAck. Specifically, the PLEXIL command node/action is waiting for the latter. You should be able to return something immediately, even if the command is durative.
Is it correct to start a new thread in my
executeCommand, return and then call handleCommandAck when the new
thread finishes?
Sure, that's fine, and you can return additional command handles, as well as the return value, if there is one, as they become available. The plan should monitor for, and handle these, as needed. In some cases, it may not care.
What exactly is the second parameter in handleCommandAck? It seems to
make no difference.
It must be of the valid command handle values, listed here: http://plexil.sourceforge.net/wiki/index.php/Resource_Model
It may not make a difference if the PLEXIL plan doesn't check for the handle you are sending.
How can I signal that a command failed?
Use the COMMAND_FAILED handle.
Hope this helped!
Best,
Mike
K. Michael Dalal
KBR at NASA Ames Research Center
--Opinions expressed herein are my own--
|
|
From: Martin F. <mar...@un...> - 2019-05-14 15:04:34
|
Hi, I am currently trying out PLEXIL 4.5.0RC2 and I am trying to figure out how to connect PLEXIL to a simulated system. I am using the SampleAdapter from examples/sample-app as reference and some basic functionality is already working but there are still some questions left. I tried to find answers in the wiki but maybe I looked in the wrong places. Maybe you could be so kind and point me to the answers or correct me where I am wrong? What I understood (maybe correctly?): When the SampleAdapter receives a command it processes the command in executeCommand, calls m_execInterface.handleCommandAck(cmd, COMMAND_SENT_TO_SYSTEM); and if no return value is needed informs about the event with m_execInterface.notifyOfExternalEvent(); As long as executeCommand is running, the plan execution is stopped. According to http://plexil.sourceforge.net/wiki/index.php/Plexil_Reference#Asynchronous_command_execution it waits for the acknowledgement. How do I prevent blocking? Is it correct to start a new thread in my executeCommand, return and then call handleCommandAck when the new thread finishes? What exactly is the second parameter in handleCommandAck? It seems to make no difference. How can I signal that a command failed? I would be thankful if you could answer these questions. Best, Martin |
|
From: Dalal, M. (ARC-TI)[S. INC] <mic...@na...> - 2019-05-03 23:19:08
|
Hi Martin,
Thanks for your message to plexil-support and your interest in PLEXIL.
I was able to reproduce the problems you reported with the Plexil Viewer. The entry I have just added and committed in plexil-4/CAVEATS sumarizes the situation:
* May 3, 2019. For a while now, the Plexil Viewer is not in a good working
state. It has not been actively supported in years, and has a variety of
problems. PLEXIL is still in strong use, in its command line form.
The example plan will run fine without the viewer:
plexiltest -p DriveToTarget.plx -s scripts/DriveToTarget.psx
You can get detailed information about execution state by entering the desired flags in your Debug.cfg file -- see the section on executing PLEXIL plans on Sourceforge. This is how we have been running PLEXIL and debugging plans. At the moment we don't have the budget and staff needed to work on the PLEXIL viewer. Hopefully we will at some point, but in the mean time you are encouraged to debug/improve the Viewer yourself if you are so inclined. We would welcome any fixes or enhancements to it from the PLEXIL community. We hope that PLEXIL otherwise meets your needs.
Best,
Mike
K. Michael Dalal
SGT Inc. at NASA Ames Research Center
--Opinions expressed herein are my own--
|
|
From: Martin F. <mar...@un...> - 2019-05-03 13:07:29
|
Hello, I installed plexil-4.5.0RC2 and was trying to execute an example plan in the Test Executive. I followed the description on http://plexil.sourceforge.net/wiki/index.php/Viewing_Plan_Execution In the directory examples/basic I entered plexiltest -v -b -p DriveToTarget.plx -s scripts/DriveToTarget.psx Then the Plexil Viewer Console opens, saying: STATUS: Listening on port 49100 Also the Plan View opens and shows the tree structure of the plan. When I select Run - Execute Plan an error message shows: Can't execute DriveToTarget. No executive has been selected for this plan. When I select File - Plan Settings PlexilTest is already selected. I select the same Sim Script as in the command line argument. Again I select Run - Execute Plan. In the Plan View's status bar it shows: Execution complete There is no pause at the beginning of execution. In the Plexil Viewer Console it shows: Using Test Executive... /home/fritsche/projekte/plexil/plexil-4.5.0RC2/scripts/plexiltest --for-viewer -v -n 49100 -b -d /dev/null -p /home/fritsche/projekte/plexil/plexil-4.5.0RC2/examples/basic/DriveToTarget.plx -s /home/fritsche/projekte/plexil/plexil-4.5.0RC2/examples/basic/scripts/DriveToTarget.psx Running executive from /home/fritsche/projekte/plexil/plexil-4.5.0RC2 Plan: /home/fritsche/projekte/plexil/plexil-4.5.0RC2/examples/basic/DriveToTarget.plx Viewer port: 49100 RUN_TE_PID18410 ExecTestRunner.cc(219) luvPort: 49100 Socket.cpp(62) MARK WARNING: ExecTestRunner.cc:309: WARNING: Unable to connect to Plexil Viewer: address: localhost:49100 Execution will continue without the viewer. This does not match the description in the wiki. Is the documentation outdated or am I doing something wrong? Also closing the Plexil Viewer Console is not possible. It's not closing but stops responding. I need to xkill it. OS is Debian GNU/Linux 9.9 (stretch) java is openjdk version "1.8.0_212" Best, Martin |
|
From: Andrew H. <and...@gm...> - 2018-07-31 23:19:19
|
Hi Mike, Thanks for the help and clarification. -andrew On Tue, Jul 31, 2018 at 12:53 PM, Dalal, Michael (ARC-TI)[SGT, INC] < mic...@na...> wrote: > Ah, I saw it! Just corrected that sentence. Thanks for your diligent > observation, and reporting the error. > > Best, > Mike > > > On Jul 31, 2018, at 12:23 PM, Andrew Harris <and...@gm...> wrote: > > In your answer you state that the two excerpts relate to what is > accessible in a plan. In my reading, I am still seeing a difference in the > two excerpts. To me, it seems that the first excerpt states that all > ancestor states can be queried, while the second excerpt says only the > parent can be queried. Perhaps I am misreading the text? > > > |
|
From: Dalal, M. (ARC-TI)[S. INC] <mic...@na...> - 2018-07-31 19:53:52
|
Ah, I saw it! Just corrected that sentence. Thanks for your diligent observation, and reporting the error. Best, Mike On Jul 31, 2018, at 12:23 PM, Andrew Harris <and...@gm...<mailto:and...@gm...>> wrote: In your answer you state that the two excerpts relate to what is accessible in a plan. In my reading, I am still seeing a difference in the two excerpts. To me, it seems that the first excerpt states that all ancestor states can be queried, while the second excerpt says only the parent can be queried. Perhaps I am misreading the text? |
|
From: Andrew H. <and...@gm...> - 2018-07-31 19:23:43
|
Hi Mike, Thanks for the answer. I see what you are saying with regard to what is available in a plan versus what is available to the executive. I will be more careful differentiating these two environments. In your answer you state that the two excerpts relate to what is accessible in a plan. In my reading, I am still seeing a difference in the two excerpts. To me, it seems that the first excerpt states that all ancestor states can be queried, while the second excerpt says only the parent can be queried. Perhaps I am misreading the text? thanks, -andrew On Tue, Jul 31, 2018 at 12:11 PM, Dalal, Michael (ARC-TI)[SGT, INC] < mic...@na...> wrote: > Hello Andrew, > > Thanks for your detailed question, and interest in PLEXIL. > > I’m not seeing a difference, or contradiction, in the two excerpts you > cite. However, I think I understand your question. Note that there is a > difference between what’s accessible in a *plan* (described in the two > excerpts) via what’s accessible by the *executive*. > > The state transition diagrams describe how the executive works, i.e. the > execution semantics of PLEXIL. A node X has behaviors that are triggered > by the state of any ancestor node. That doesn’t imply that any ancestor > can be queried in X’s code. > > Hope this helps. > > Best, > Mike > > > > On Jul 30, 2018, at 9:26 PM, Andrew Harris <and...@gm...> wrote: > > Hello, > > The PLEXIL wiki here: > > http://plexil.sourceforge.net/wiki/index.php/Plexil_Reference#Action_State > > mentions: > > A PLEXIL action can access its own internal state, or the internal state > of other actions, but only those actions which are its siblings, children, > or ancestors. (The internal state of more distant actions is not > accessible). > > However, in another section of the wiki, here: > > http://plexil.sourceforge.net/wiki/index.php/Overview#State. > 2C_Outcome.2C_and_Introspection > > is mentioned: > > A action can (e.g. in one of its conditions) query the state and outcome > of itself, its parent, children, and siblings, but no other actions; it can > also query the start and end times of any given state of these actions. > > Note in the second excerpt not all of the ancestors are allowed. When I > look at the evaluation flow charts, for example, the "Inactive one" here: > > http://plexil.sourceforge.net/wiki/index.php/Node_State_Tran > sition_Diagrams#INACTIVE_state > > It appears that the node must be able to query the state of all of the > ancestors. So it would seem that the first excerpt is correct and the > second is not. Am I correct in this assumption? Any help would be > appreciated. I would like to understand exactly what states a node is able > to access. > > thanks, > -andrew > > ------------------------------------------------------------ > ------------------ > Check out the vibrant tech community on one of the world's most > engaging tech sites, Slashdot.org! http://sdm.link/slashdot______ > _________________________________________ > plexil-support mailing list > ple...@li... > https://lists.sourceforge.net/lists/listinfo/plexil-support > > > |
|
From: Dalal, M. (ARC-TI)[S. INC] <mic...@na...> - 2018-07-31 19:11:44
|
Hello Andrew, Thanks for your detailed question, and interest in PLEXIL. I’m not seeing a difference, or contradiction, in the two excerpts you cite. However, I think I understand your question. Note that there is a difference between what’s accessible in a *plan* (described in the two excerpts) via what’s accessible by the *executive*. The state transition diagrams describe how the executive works, i.e. the execution semantics of PLEXIL. A node X has behaviors that are triggered by the state of any ancestor node. That doesn’t imply that any ancestor can be queried in X’s code. Hope this helps. Best, Mike On Jul 30, 2018, at 9:26 PM, Andrew Harris <and...@gm...<mailto:and...@gm...>> wrote: Hello, The PLEXIL wiki here: http://plexil.sourceforge.net/wiki/index.php/Plexil_Reference#Action_State mentions: A PLEXIL action can access its own internal state, or the internal state of other actions, but only those actions which are its siblings, children, or ancestors. (The internal state of more distant actions is not accessible). However, in another section of the wiki, here: http://plexil.sourceforge.net/wiki/index.php/Overview#State.2C_Outcome.2C_and_Introspection is mentioned: A action can (e.g. in one of its conditions) query the state and outcome of itself, its parent, children, and siblings, but no other actions; it can also query the start and end times of any given state of these actions. Note in the second excerpt not all of the ancestors are allowed. When I look at the evaluation flow charts, for example, the "Inactive one" here: http://plexil.sourceforge.net/wiki/index.php/Node_State_Transition_Diagrams#INACTIVE_state It appears that the node must be able to query the state of all of the ancestors. So it would seem that the first excerpt is correct and the second is not. Am I correct in this assumption? Any help would be appreciated. I would like to understand exactly what states a node is able to access. thanks, -andrew ------------------------------------------------------------------------------ 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_______________________________________________ plexil-support mailing list ple...@li...<mailto:ple...@li...> https://lists.sourceforge.net/lists/listinfo/plexil-support |
|
From: Andrew H. <and...@gm...> - 2018-07-31 04:26:53
|
Hello, The PLEXIL wiki here: http://plexil.sourceforge.net/wiki/index.php/Plexil_Reference#Action_State mentions: A PLEXIL action can access its own internal state, or the internal state of other actions, but only those actions which are its siblings, children, or ancestors. (The internal state of more distant actions is not accessible). However, in another section of the wiki, here: http://plexil.sourceforge.net/wiki/index.php/Overview#State. 2C_Outcome.2C_and_Introspection is mentioned: A action can (e.g. in one of its conditions) query the state and outcome of itself, its parent, children, and siblings, but no other actions; it can also query the start and end times of any given state of these actions. Note in the second excerpt not all of the ancestors are allowed. When I look at the evaluation flow charts, for example, the "Inactive one" here: http://plexil.sourceforge.net/wiki/index.php/Node_State_ Transition_Diagrams#INACTIVE_state It appears that the node must be able to query the state of all of the ancestors. So it would seem that the first excerpt is correct and the second is not. Am I correct in this assumption? Any help would be appreciated. I would like to understand exactly what states a node is able to access. thanks, -andrew |
|
From: Andrew H. <and...@gm...> - 2018-07-30 06:08:59
|
Hello, The PLEXIL wiki here: http://plexil.sourceforge.net/wiki/index.php/Plexil_Reference#Action_State mentions: A PLEXIL action can access its own internal state, or the internal state of other actions, but only those actions which are its siblings, children, or ancestors. (The internal state of more distant actions is not accessible). However, in another section of the wiki, here: http://plexil.sourceforge.net/wiki/index.php/Overview#State.2C_Outcome.2C_and_Introspection is mentioned: A action can (e.g. in one of its conditions) query the state and outcome of itself, its parent, children, and siblings, but no other actions; it can also query the start and end times of any given state of these actions. Note in the second excerpt not all of the ancestors are allowed. When I look at the evaluation flow charts, for example, the "Inactive one" here: http://plexil.sourceforge.net/wiki/index.php/Node_State_Transition_Diagrams#INACTIVE_state It appears that the node must be able to query the state of all of the ancestors. So it would seem that the first excerpt is correct and the second is not. Am I correct in this assumption? Any help would be appreciated. I would like to understand exactly what states a node is able to access. thanks, -andrew |
|
From: Chuck F. <Cha...@na...> - 2016-12-21 08:27:45
|
Thanks for the reply, and the information on the compiler. I'll set up a Debian VM to reproduce and fix the issues you've reported. We do try to keep the PLEXIL code base portable across platforms and compiler versions, but since we're a 1-1/2 man team, we can't cover all the bases all the time.
GanttListener is an optional interface, used only to view plan execution in GANTT chart format. It was written by an intern and the code quality is poor, but it usually builds successfully on most compilers. If you wish, you can modify the top-level Makefile to ignore it. Look for this target at line 157 and change --enable-gantt to --disable-gantt:
src/Makefile: src/configure
cd ./src && ./configure --prefix=$(PLEXIL_HOME) \
CC=$(CC) CXX=$(CXX) --disable-static \
--enable-gantt --enable-ipc --enable-sas --enable-test-exec --enable-udp
Then 'touch src/configure' and run 'make' again.
gcc 6.2.1 is a fairly recent release, and it defaults to the C++11 language standard. There may be some minor incompatibilities with the PLEXIL 4.x series code. This code base is intended to use the previous standard (C++98 or C++03), because we occasionally build it for real-time OSes with ancient compilers.
I'm working on another branch specifically for C++11. That is the plexil-x branch. It is "development" quality, i.e. may not be stable at any given time, but if you try it I would appreciate your feedback. This will be the foundation of the next major release, PLEXIL 6. (We're skipping 5 because someone else already used that number!)
Again, my apologies that this failed to build "out of the box" for you. Your feedback is very helpful.
-- Chuck
> On Dec 20, 2016, at 11:54 PM, Dipankar Niranjan <dip...@gm...> wrote:
>
> Hi Chuck,
>
> Thanks a lot for your reply.
> Yes, the problem was compiler related.
> I've been using 'gcc version 6.2.1 20161124 (Debian 6.2.1-5)'
>
> Keeping with your suggestion, I tried building from the subversion repo.
> This time, TestExec had no problems as you've said.
> But there were some issues with GanttListener:
>
> Making all in interfaces/GanttListener
> make[3]: Entering directory '/root/Desktop/plexil-4/src/interfaces/GanttListener'
> /bin/bash ../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../.. -I../../third-party/pugixml/src -I../../app-framework -I../../expr -I../../intfc -I../../exec -I../../value -I../../utils -g -O2 -MT libGanttListener_la-GanttListener.lo -MD -MP -MF .deps/libGanttListener_la-GanttListener.Tpo -c -o libGanttListener_la-GanttListener.lo `test -f 'GanttListener.cc' || echo './'`GanttListener.cc
> libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I../../third-party/pugixml/src -I../../app-framework -I../../expr -I../../intfc -I../../exec -I../../value -I../../utils -g -O2 -MT libGanttListener_la-GanttListener.lo -MD -MP -MF .deps/libGanttListener_la-GanttListener.Tpo -c GanttListener.cc -fPIC -DPIC -o .libs/libGanttListener_la-GanttListener.o
> GanttListener.cc: In function ‘std::__cxx11::string PLEXIL::getLocalVarInExecStateFromMap(PLEXIL::Node*, std::vector<std::__cxx11::basic_string<char> >&)’:
> GanttListener.cc:306:25: error: no match for ‘operator<<’ (operand types are ‘std::ostringstream {aka std::__cxx11::basic_ostringstream<char>}’ and ‘std::ostringstream {aka std::__cxx11::basic_ostringstream<char>}’)
> myLocalVars << tempString << ", ";
> ~~~~~~~~~~~~^~~~~~~~~~~~~
[... much trimmed ...]
> Makefile:468: recipe for target 'libGanttListener_la-GanttListener.lo' failed
> make[3]: *** [libGanttListener_la-GanttListener.lo] Error 1
> make[3]: Leaving directory '/root/Desktop/plexil-4/src/interfaces/GanttListener'
> Makefile:502: recipe for target 'all-recursive' failed
> make[2]: *** [all-recursive] Error 1
> make[2]: Leaving directory '/root/Desktop/plexil-4/src'
> Makefile:413: recipe for target 'all' failed
> make[1]: *** [all] Error 2
> make[1]: Leaving directory '/root/Desktop/plexil-4/src'
> Makefile:152: recipe for target 'most-build' failed
> make: *** [most-build] Error 2
>
> Again seems to be a compiler problem.
> For now, I've got a successful build using 'clang version 3.8.1-16 (tags/RELEASE_381/final)'. Maybe I should stick with it..?
> Why is gcc/g++ unable to compile it though? Am I using an old version?
>
> Thank You again.
>
> On Wed, Dec 21, 2016 at 3:13 AM, Fry, Charles R. {Chuck} (ARC-TI)[Stinger Ghaffarian Technologies Inc. (SGT Inc.)] <Chu...@na... <mailto:Chu...@na...>> wrote:
> Hi. Thank you for the report, and sorry for the trouble. This rings a bell.
>
> Which compiler and version are you using? We have observed that some compilers require explicit instantiation of templated classes and member functions. At least some of the missing member functions are doubly-templated, e.g.
>
> template <typename U>
> template <typename T>
> bool ExpressionImpl<T>::getValueImpl(U &result)
> {...}
>
> These methods are generally wrong-type error methods, with a couple of conversion methods (e.g. getting a Real value from an Integer expression).
> Some compilers would not automatically instantiate these, so in later versions we added explicit instantiations for all combinations of T and U. This gets rather verbose, as you can imagine.
> The current version in the Subversion repository is quite far ahead of 4.0.1. May I suggest you try it and report your results? We are actively using and supporting it internally, even if we haven't built a formal release yet. You can obtain it with:
>
> svn checkout https://svn.code.sf.net/p/plexil/code/branches/plexil-4 <https://svn.code.sf.net/p/plexil/code/branches/plexil-4>
>
> -- Chuck
>
>
> On 12/20/16 12:49 PM, Dipankar Niranjan wrote:
>>
>> Hello,
>>
>> I was executing 'Make' in the 'plexil-4.0.1' directory. (top level makefile)
>> I'm running into the following log:
>>
>> Making all in apps/TestExec
>> make[2]: Entering directory '/root/Desktop/plexil-4.0.1/src/apps/TestExec'
>> g++ -DHAVE_CONFIG_H -I. -I../.. -I../../app-framework -I../../xml-parser -I../../third-party/pugixml/src -I../../exec -I../../intfc -I../../expr -I../../value -I../../utils -I../../interfaces/PlanDebugListener -I../../interfaces/LuvListener -I../../interfaces/Sockets -g -O2 -MT TestExec-exec-test-runner.o -MD -MP -MF .deps/TestExec-exec-test-runner.Tpo -c -o TestExec-exec-test-runner.o `test -f 'exec-test-runner.cc' || echo './'`exec-test-runner.cc
>> mv -f .deps/TestExec-exec-test-runner.Tpo .deps/TestExec-exec-test-runner.Po
>> g++ -DHAVE_CONFIG_H -I. -I../.. -I../../app-framework -I../../xml-parser -I../../third-party/pugixml/src -I../../exec -I../../intfc -I../../expr -I../../value -I../../utils -I../../interfaces/PlanDebugListener -I../../interfaces/LuvListener -I../../interfaces/Sockets -g -O2 -MT TestExec-ExecTestRunner.o -MD -MP -MF .deps/TestExec-ExecTestRunner.Tpo -c -o TestExec-ExecTestRunner.o `test -f 'ExecTestRunner.cc' || echo './'`ExecTestRunner.cc
>> mv -f .deps/TestExec-ExecTestRunner.Tpo .deps/TestExec-ExecTestRunner.Po
>> g++ -DHAVE_CONFIG_H -I. -I../.. -I../../app-framework -I../../xml-parser -I../../third-party/pugixml/src -I../../exec -I../../intfc -I../../expr -I../../value -I../../utils -I../../interfaces/PlanDebugListener -I../../interfaces/LuvListener -I../../interfaces/Sockets -g -O2 -MT TestExec-TestExternalInterface.o -MD -MP -MF .deps/TestExec-TestExternalInterface.Tpo -c -o TestExec-TestExternalInterface.o `test -f 'TestExternalInterface.cc' || echo './'`TestExternalInterface.cc
>> mv -f .deps/TestExec-TestExternalInterface.Tpo .deps/TestExec-TestExternalInterface.Po
>> /bin/bash ../../libtool --tag=CXX --mode=link g++ -g -O2 -o TestExec TestExec-exec-test-runner.o TestExec-ExecTestRunner.o TestExec-TestExternalInterface.o ../../interfaces/PlanDebugListener/libPlanDebugListener.la ../../interfaces/LuvListener/libLuvListener.la ../../interfaces/Sockets/libPlexilSockets.la ../../app-framework/libPlexilAppFramework.la ../../xml-parser/libPlexilXmlParser.la ../../third-party/pugixml/src/libpugixml.la <http://libpugixml.la/>../../exec/libPlexilExec.la ../../intfc/libPlexilIntfc.la ../../expr/libPlexilExpr.la ../../value/libPlexilValue.la ../../utils/libPlexilUtils.la -lnsl -lm -lrt -lpthread -ldl
>> libtool: link: g++ -g -O2 -o .libs/TestExec TestExec-exec-test-runner.o TestExec-ExecTestRunner.o TestExec-TestExternalInterface.o ../../interfaces/PlanDebugListener/.libs/libPlanDebugListener.so ../../interfaces/LuvListener/.libs/libLuvListener.so ../../interfaces/Sockets/.libs/libPlexilSockets.so ../../app-framework/.libs/libPlexilAppFramework.so ../../xml-parser/.libs/libPlexilXmlParser.so ../../third-party/pugixml/src/.libs/libpugixml.so ../../exec/.libs/libPlexilExec.so ../../intfc/.libs/libPlexilIntfc.so ../../expr/.libs/libPlexilExpr.so ../../value/.libs/libPlexilValue.so ../../utils/.libs/libPlexilUtils.so -lnsl -lm -lrt -lpthread -ldl -Wl,-rpath -Wl,/root/Desktop/plexil-4.0.1/lib
>> ../../exec/.libs/libPlexilExec.so: undefined reference to `bool PLEXIL::ExpressionImpl<double>::getValueImpl<unsigned short>(unsigned short&) const'
[... much trimmed ...]
>> collect2: error: ld returned 1 exit status
>> Makefile:346: recipe for target 'TestExec' failed
>> make[2]: *** [TestExec] Error 1
>> make[2]: Leaving directory '/root/Desktop/plexil-4.0.1/src/apps/TestExec'
>> Makefile:352: recipe for target 'all-recursive' failed
>> make[1]: *** [all-recursive] Error 1
>> make[1]: Leaving directory '/root/Desktop/plexil-4.0.1/src'
>> Makefile:283: recipe for target 'all' failed
>> make: *** [all] Error 2
>>
>> (Only the relevant part is posted)
>> Seems like a linker error similar to the one described here <http://stackoverflow.com/questions/25002328/exported-symbols-in-o-file-not-getting-exported-in-dylib <http://stackoverflow.com/questions/25002328/exported-symbols-in-o-file-not-getting-exported-in-dylib>>
>>
>> Any workarounds/fixes or do I have to transfer code from the .cc files to .hh files?
>> Doesn't seem like I can make do without TestExec.
>>
>> Thank You
>>
>>
>> ------------------------------------------------------------------------------
>> Developer Access Program for Intel Xeon Phi Processors
>> Access to Intel Xeon Phi processor-based developer platforms.
>> With one year of Intel Parallel Studio XE.
>> Training and support from Colfax.
>> Order your platform today.http://sdm.link/intel <http://sdm.link/intel>
>>
>> _______________________________________________
>> plexil-support mailing list
>> ple...@li... <mailto:ple...@li...>
>> https://lists.sourceforge.net/lists/listinfo/plexil-support <https://lists.sourceforge.net/lists/listinfo/plexil-support>
>
>
>
>
> --
> REGARDS,
> DIP
Chuck Fry | QTS Inc.
Office: 650 604 1882 Mobile: 408 230 2715
M/S 269-1, Building N269/260-7
NASA Ames Research Center
Moffett Field, CA 94035-1000
I do not speak for QTS Inc., SGT, Code TI, or NASA, nor do they speak for me.
|
|
From: Fry, C. R. {C. (ARC-TI)[S. G. T. I. (S. Inc.)] <Chu...@na...> - 2016-12-20 21:45:00
|
Hi. Thank you for the report, and sorry for the trouble. This rings a bell.
Which compiler and version are you using? We have observed that some
compilers require explicit instantiation of templated classes and member
functions. At least some of the missing member functions are
doubly-templated, e.g.
template <typename U>
template <typename T>
bool ExpressionImpl<T>::getValueImpl(U &result)
{...}
These methods are generally wrong-type error methods, with a couple of
conversion methods (e.g. getting a Real value from an Integer expression).
Some compilers would not automatically instantiate these, so in later
versions we added explicit instantiations for all combinations of T and
U. This gets rather verbose, as you can imagine.
The current version in the Subversion repository is quite far ahead of
4.0.1. May I suggest you try it and report your results? We are actively
using and supporting it internally, even if we haven't built a formal
release yet. You can obtain it with:
svn checkout https://svn.code.sf.net/p/plexil/code/branches/plexil-4
-- Chuck
On 12/20/16 12:49 PM, Dipankar Niranjan wrote:
>
> Hello,
>
> I was executing 'Make' in the 'plexil-4.0.1' directory. (top level
> makefile)
> I'm running into the following log:
>
> Making all in apps/TestExec
> make[2]: Entering directory
> '/root/Desktop/plexil-4.0.1/src/apps/TestExec'
> g++ -DHAVE_CONFIG_H -I. -I../.. -I../../app-framework
> -I../../xml-parser -I../../third-party/pugixml/src -I../../exec
> -I../../intfc -I../../expr -I../../value -I../../utils
> -I../../interfaces/PlanDebugListener
> -I../../interfaces/LuvListener -I../../interfaces/Sockets -g -O2
> -MT TestExec-exec-test-runner.o -MD -MP -MF
> .deps/TestExec-exec-test-runner.Tpo -c -o
> TestExec-exec-test-runner.o `test -f 'exec-test-runner.cc' || echo
> './'`exec-test-runner.cc
> mv -f .deps/TestExec-exec-test-runner.Tpo
> .deps/TestExec-exec-test-runner.Po
> g++ -DHAVE_CONFIG_H -I. -I../.. -I../../app-framework
> -I../../xml-parser -I../../third-party/pugixml/src -I../../exec
> -I../../intfc -I../../expr -I../../value -I../../utils
> -I../../interfaces/PlanDebugListener
> -I../../interfaces/LuvListener -I../../interfaces/Sockets -g -O2
> -MT TestExec-ExecTestRunner.o -MD -MP -MF
> .deps/TestExec-ExecTestRunner.Tpo -c -o TestExec-ExecTestRunner.o
> `test -f 'ExecTestRunner.cc' || echo './'`ExecTestRunner.cc
> mv -f .deps/TestExec-ExecTestRunner.Tpo
> .deps/TestExec-ExecTestRunner.Po
> g++ -DHAVE_CONFIG_H -I. -I../.. -I../../app-framework
> -I../../xml-parser -I../../third-party/pugixml/src -I../../exec
> -I../../intfc -I../../expr -I../../value -I../../utils
> -I../../interfaces/PlanDebugListener
> -I../../interfaces/LuvListener -I../../interfaces/Sockets -g -O2
> -MT TestExec-TestExternalInterface.o -MD -MP -MF
> .deps/TestExec-TestExternalInterface.Tpo -c -o
> TestExec-TestExternalInterface.o `test -f
> 'TestExternalInterface.cc' || echo './'`TestExternalInterface.cc
> mv -f .deps/TestExec-TestExternalInterface.Tpo
> .deps/TestExec-TestExternalInterface.Po
> /bin/bash ../../libtool --tag=CXX --mode=link g++ -g -O2 -o
> TestExec TestExec-exec-test-runner.o TestExec-ExecTestRunner.o
> TestExec-TestExternalInterface.o
> ../../interfaces/PlanDebugListener/libPlanDebugListener.la
> ../../interfaces/LuvListener/libLuvListener.la
> ../../interfaces/Sockets/libPlexilSockets.la
> ../../app-framework/libPlexilAppFramework.la
> ../../xml-parser/libPlexilXmlParser.la
> ../../third-party/pugixml/src/libpugixml.la <http://libpugixml.la>
> ../../exec/libPlexilExec.la ../../intfc/libPlexilIntfc.la
> ../../expr/libPlexilExpr.la ../../value/libPlexilValue.la
> ../../utils/libPlexilUtils.la -lnsl -lm -lrt -lpthread -ldl
> libtool: link: g++ -g -O2 -o .libs/TestExec
> TestExec-exec-test-runner.o TestExec-ExecTestRunner.o
> TestExec-TestExternalInterface.o
> ../../interfaces/PlanDebugListener/.libs/libPlanDebugListener.so
> ../../interfaces/LuvListener/.libs/libLuvListener.so
> ../../interfaces/Sockets/.libs/libPlexilSockets.so
> ../../app-framework/.libs/libPlexilAppFramework.so
> ../../xml-parser/.libs/libPlexilXmlParser.so
> ../../third-party/pugixml/src/.libs/libpugixml.so
> ../../exec/.libs/libPlexilExec.so
> ../../intfc/.libs/libPlexilIntfc.so
> ../../expr/.libs/libPlexilExpr.so
> ../../value/.libs/libPlexilValue.so
> ../../utils/.libs/libPlexilUtils.so -lnsl -lm -lrt -lpthread -ldl
> -Wl,-rpath -Wl,/root/Desktop/plexil-4.0.1/lib
> ../../exec/.libs/libPlexilExec.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<double>::getValueImpl<unsigned
> short>(unsigned short&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >::getValuePointerImpl<PLEXIL::ArrayImpl<bool>
> >(PLEXIL::ArrayImpl<bool> const*&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<bool>::setValueImpl<double>(double const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<int>
> >::getValueImpl<double>(double&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<double>
> >::getValuePointerImpl<PLEXIL::ArrayImpl<bool>
> >(PLEXIL::ArrayImpl<bool> const*&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<int>
> >::getMutableValuePointerImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >(PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >*&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::AssignableImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >::getMutableValuePointerImpl<PLEXIL::ArrayImpl<double>
> >(PLEXIL::ArrayImpl<double>*&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<double>::setValueImpl<PLEXIL::ArrayImpl<int>
> >(PLEXIL::ArrayImpl<int> const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::AssignableImpl<int>::getMutableValuePointerImpl<PLEXIL::ArrayImpl<int>
> >(PLEXIL::ArrayImpl<int>*&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >::getValueImpl<unsigned short>(unsigned short&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<int>::setValueImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >(std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> > const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<int>
> >::getValueImpl<int>(int&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<int>::setValueImpl<unsigned short>(unsigned
> short const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<int>::getValueImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >(std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> >&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >::setValueImpl<PLEXIL::ArrayImpl<int> >(PLEXIL::ArrayImpl<int>
> const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<bool>::getValueImpl<unsigned
> short>(unsigned short&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<bool>
> >::getValuePointerImpl<PLEXIL::ArrayImpl<int>
> >(PLEXIL::ArrayImpl<int> const*&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<double>::setValueImpl<PLEXIL::ArrayImpl<double>
> >(PLEXIL::ArrayImpl<double> const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<int>::setValueImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >(PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > > const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::AssignableImpl<bool>::getMutableValuePointerImpl<PLEXIL::ArrayImpl<bool>
> >(PLEXIL::ArrayImpl<bool>*&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<double>
> >::getValuePointerImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >(std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> > const*&) const'
> ../../exec/.libs/libPlexilExec.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<double>::getValuePointerImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >(PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > > const*&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<bool>::getValuePointerImpl<PLEXIL::ArrayImpl<double>
> >(PLEXIL::ArrayImpl<double> const*&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<double>
> >::getValuePointerImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >(PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > > const*&) const'
> ../../exec/.libs/libPlexilExec.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<unsigned
> short>::getValuePointerImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >(PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > > const*&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<bool>
> >::getMutableValuePointerImpl<PLEXIL::ArrayImpl<int>
> >(PLEXIL::ArrayImpl<int>*&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<bool>
> >::setValueImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >(std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> > const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >::setValueImpl<PLEXIL::ArrayImpl<double>
> >(PLEXIL::ArrayImpl<double> const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::AssignableImpl<int>::getMutableValuePointerImpl<PLEXIL::ArrayImpl<bool>
> >(PLEXIL::ArrayImpl<bool>*&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<bool>::setValueImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >(PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > > const&)'
> ../../exec/.libs/libPlexilExec.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<unsigned
> short>::getValuePointerImpl<PLEXIL::ArrayImpl<bool>
> >(PLEXIL::ArrayImpl<bool> const*&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >::getMutableValuePointerImpl<PLEXIL::ArrayImpl<bool>
> >(PLEXIL::ArrayImpl<bool>*&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >::setValueImpl<PLEXIL::ArrayImpl<int> >(PLEXIL::ArrayImpl<int>
> const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::AssignableImpl<double>::getMutableValuePointerImpl<PLEXIL::Array>(PLEXIL::Array*&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<double>
> >::getMutableValuePointerImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >(PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >*&)'
> ../../exec/.libs/libPlexilExec.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<double>::getValueImpl<bool>(bool&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<bool>
> >::getValueImpl<double>(double&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >::setValueImpl<bool>(bool const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::AssignableImpl<double>::getMutableValuePointerImpl<PLEXIL::ArrayImpl<int>
> >(PLEXIL::ArrayImpl<int>*&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >::setValueImpl<int>(int const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<int>::getValuePointerImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >(PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > > const*&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<bool>::setValueImpl<PLEXIL::ArrayImpl<double>
> >(PLEXIL::ArrayImpl<double> const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::AssignableImpl<double>::getMutableValuePointerImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >(std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> >*&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<double>
> >::setValueImpl<double>(double const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<double>::setValueImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >(std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> > const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<bool>::getValuePointerImpl<PLEXIL::Array>(PLEXIL::Array
> const*&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >::getValuePointerImpl<PLEXIL::ArrayImpl<bool>
> >(PLEXIL::ArrayImpl<bool> const*&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<bool>::getValuePointerImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >(std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> > const*&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::AssignableImpl<double>::getMutableValuePointerImpl<PLEXIL::ArrayImpl<double>
> >(PLEXIL::ArrayImpl<double>*&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<double>::setValueImpl<unsigned
> short>(unsigned short const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<int>
> >::setValueImpl<int>(int const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<int>::setValueImpl<PLEXIL::ArrayImpl<double>
> >(PLEXIL::ArrayImpl<double> const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::AssignableImpl<double>::getMutableValuePointerImpl<PLEXIL::ArrayImpl<bool>
> >(PLEXIL::ArrayImpl<bool>*&)'
> ../../exec/.libs/libPlexilExec.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<double>::getValuePointerImpl<PLEXIL::Array>(PLEXIL::Array
> const*&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<int>
> >::getValueImpl<bool>(bool&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >::getValueImpl<bool>(bool&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >::getValuePointerImpl<PLEXIL::ArrayImpl<double>
> >(PLEXIL::ArrayImpl<double> const*&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<bool>::setValueImpl<int>(int const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<int>::getValuePointerImpl<PLEXIL::Array>(PLEXIL::Array
> const*&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<int>::setValueImpl<PLEXIL::ArrayImpl<int>
> >(PLEXIL::ArrayImpl<int> const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<bool>::getValuePointerImpl<PLEXIL::ArrayImpl<int>
> >(PLEXIL::ArrayImpl<int> const*&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<double>
> >::getMutableValuePointerImpl<PLEXIL::ArrayImpl<bool>
> >(PLEXIL::ArrayImpl<bool>*&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::AssignableImpl<bool>::getMutableValuePointerImpl<PLEXIL::ArrayImpl<int>
> >(PLEXIL::ArrayImpl<int>*&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<int>::getValuePointerImpl<PLEXIL::ArrayImpl<int>
> >(PLEXIL::ArrayImpl<int> const*&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<double>::setValueImpl<bool>(bool const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >::setValueImpl<double>(double const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >::setValueImpl<unsigned short>(unsigned short const&)'
> ../../exec/.libs/libPlexilExec.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<unsigned short>::getValueImpl<int>(int&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >::getValuePointerImpl<PLEXIL::Array>(PLEXIL::Array const*&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<double>
> >::getValueImpl<double>(double&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<double>
> >::setValueImpl<PLEXIL::ArrayImpl<int> >(PLEXIL::ArrayImpl<int>
> const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >::setValueImpl<double>(double const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<int>::setValueImpl<double>(double const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::AssignableImpl<bool>::getMutableValuePointerImpl<PLEXIL::ArrayImpl<double>
> >(PLEXIL::ArrayImpl<double>*&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >::setValueImpl<unsigned short>(unsigned short const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<bool>
> >::getValueImpl<bool>(bool&) const'
> ../../exec/.libs/libPlexilExec.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<double>::getValuePointerImpl<PLEXIL::ArrayImpl<bool>
> >(PLEXIL::ArrayImpl<bool> const*&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<int>::setValueImpl<bool>(bool const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >::getMutableValuePointerImpl<PLEXIL::ArrayImpl<int>
> >(PLEXIL::ArrayImpl<int>*&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<int>
> >::setValueImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >(std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> > const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<int>::getValuePointerImpl<PLEXIL::ArrayImpl<bool>
> >(PLEXIL::ArrayImpl<bool> const*&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >::getValueImpl<unsigned short>(unsigned short&) const'
> ../../exec/.libs/libPlexilExec.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<unsigned
> short>::getValuePointerImpl<PLEXIL::Array>(PLEXIL::Array const*&)
> const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >::getValueImpl<int>(int&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<bool>
> >::setValueImpl<unsigned short>(unsigned short const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<double>
> >::getMutableValuePointerImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >(std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> >*&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<int>
> >::setValueImpl<unsigned short>(unsigned short const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<int>
> >::getValueImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >(std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> >&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<bool>
> >::getValueImpl<int>(int&) const'
> ../../exec/.libs/libPlexilExec.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<unsigned short>::getValueImpl<bool>(bool&)
> const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<int>
> >::getMutableValuePointerImpl<PLEXIL::ArrayImpl<double>
> >(PLEXIL::ArrayImpl<double>*&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<double>
> >::setValueImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >(PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > > const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<bool>::setValueImpl<unsigned
> short>(unsigned short const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<bool>::setValueImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >(std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> > const&)'
> ../../exec/.libs/libPlexilExec.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<unsigned
> short>::getValueImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >(std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> >&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >::getValueImpl<double>(double&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<int>::setValueImpl<PLEXIL::ArrayImpl<bool>
> >(PLEXIL::ArrayImpl<bool> const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >::getMutableValuePointerImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >(std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> >*&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<bool>
> >::setValueImpl<double>(double const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::AssignableImpl<int>::getMutableValuePointerImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >(PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >*&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::AssignableImpl<bool>::getMutableValuePointerImpl<PLEXIL::Array>(PLEXIL::Array*&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<double>::setValueImpl<PLEXIL::ArrayImpl<bool>
> >(PLEXIL::ArrayImpl<bool> const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::AssignableImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >::getMutableValuePointerImpl<PLEXIL::ArrayImpl<bool>
> >(PLEXIL::ArrayImpl<bool>*&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::AssignableImpl<bool>::getMutableValuePointerImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >(PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >*&)'
> ../../exec/.libs/libPlexilExec.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<double>::getValuePointerImpl<PLEXIL::ArrayImpl<double>
> >(PLEXIL::ArrayImpl<double> const*&) const'
> ../../exec/.libs/libPlexilExec.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<double>::getValueImpl<int>(int&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<bool>
> >::setValueImpl<PLEXIL::ArrayImpl<int> >(PLEXIL::ArrayImpl<int>
> const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<bool>
> >::getMutableValuePointerImpl<PLEXIL::ArrayImpl<double>
> >(PLEXIL::ArrayImpl<double>*&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<bool>::getValuePointerImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >(PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > > const*&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >::setValueImpl<PLEXIL::ArrayImpl<bool> >(PLEXIL::ArrayImpl<bool>
> const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >::getMutableValuePointerImpl<PLEXIL::ArrayImpl<double>
> >(PLEXIL::ArrayImpl<double>*&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >::getValuePointerImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >(std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> > const*&) const'
> ../../exec/.libs/libPlexilExec.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<double>::getValueImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >(std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> >&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >::setValueImpl<PLEXIL::ArrayImpl<double>
> >(PLEXIL::ArrayImpl<double> const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<bool>
> >::setValueImpl<int>(int const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<bool>
> >::getValuePointerImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >(std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> > const*&) const'
> ../../exec/.libs/libPlexilExec.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<double>::getValuePointerImpl<PLEXIL::ArrayImpl<int>
> >(PLEXIL::ArrayImpl<int> const*&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >::getValueImpl<double>(double&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<bool>
> >::getValuePointerImpl<PLEXIL::ArrayImpl<double>
> >(PLEXIL::ArrayImpl<double> const*&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >::setValueImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >(std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> > const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<int>
> >::getMutableValuePointerImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >(std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> >*&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<double>
> >::setValueImpl<unsigned short>(unsigned short const&)'
> ../../exec/.libs/libPlexilExec.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<double>::getValuePointerImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >(std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> > const*&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::AssignableImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >::getMutableValuePointerImpl<PLEXIL::ArrayImpl<int>
> >(PLEXIL::ArrayImpl<int>*&)'
> ../../exec/.libs/libPlexilExec.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<unsigned
> short>::getValueImpl<double>(double&) const'
> ../../exec/.libs/libPlexilExec.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<unsigned
> short>::getValuePointerImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >(std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> > const*&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<int>
> >::setValueImpl<PLEXIL::ArrayImpl<bool> >(PLEXIL::ArrayImpl<bool>
> const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >::getValueImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >(std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> >&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >::setValueImpl<bool>(bool const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<int>::getValuePointerImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >(std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> > const*&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<double>
> >::setValueImpl<bool>(bool const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >::getValuePointerImpl<PLEXIL::ArrayImpl<int>
> >(PLEXIL::ArrayImpl<int> const*&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::AssignableImpl<int>::getMutableValuePointerImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >(std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> >*&)'
> ../../exec/.libs/libPlexilExec.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<unsigned
> short>::getValuePointerImpl<PLEXIL::ArrayImpl<double>
> >(PLEXIL::ArrayImpl<double> const*&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<int>::getValuePointerImpl<PLEXIL::ArrayImpl<double>
> >(PLEXIL::ArrayImpl<double> const*&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<double>
> >::setValueImpl<PLEXIL::ArrayImpl<bool> >(PLEXIL::ArrayImpl<bool>
> const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >::getValuePointerImpl<PLEXIL::ArrayImpl<double>
> >(PLEXIL::ArrayImpl<double> const*&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<int>
> >::setValueImpl<PLEXIL::ArrayImpl<double>
> >(PLEXIL::ArrayImpl<double> const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::AssignableImpl<bool>::getMutableValuePointerImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >(std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> >*&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<int>::getValueImpl<unsigned short>(unsigned
> short&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >::getValueImpl<bool>(bool&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<int>
> >::getValuePointerImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >(std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> > const*&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<bool>::getValueImpl<double>(double&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<bool>::getValuePointerImpl<PLEXIL::ArrayImpl<bool>
> >(PLEXIL::ArrayImpl<bool> const*&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<double>
> >::setValueImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >(std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> > const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<bool>
> >::setValueImpl<PLEXIL::ArrayImpl<double>
> >(PLEXIL::ArrayImpl<double> const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<double>
> >::setValueImpl<int>(int const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<int>::getValueImpl<bool>(bool&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<double>
> >::getValueImpl<unsigned short>(unsigned short&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<int>
> >::setValueImpl<double>(double const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<int>
> >::getValuePointerImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >(PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > > const*&) const'
> ../../exec/.libs/libPlexilExec.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<unsigned
> short>::getValuePointerImpl<PLEXIL::ArrayImpl<int>
> >(PLEXIL::ArrayImpl<int> const*&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<bool>::setValueImpl<PLEXIL::ArrayImpl<bool>
> >(PLEXIL::ArrayImpl<bool> const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<bool>::getValueImpl<int>(int&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<int>
> >::setValueImpl<bool>(bool const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<double>
> >::getMutableValuePointerImpl<PLEXIL::ArrayImpl<int>
> >(PLEXIL::ArrayImpl<int>*&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >::setValueImpl<PLEXIL::ArrayImpl<bool> >(PLEXIL::ArrayImpl<bool>
> const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<bool>::setValueImpl<PLEXIL::ArrayImpl<int>
> >(PLEXIL::ArrayImpl<int> const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<bool>
> >::getMutableValuePointerImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >(std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> >*&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >::getValuePointerImpl<PLEXIL::ArrayImpl<int>
> >(PLEXIL::ArrayImpl<int> const*&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<double>
> >::getValuePointerImpl<PLEXIL::ArrayImpl<int>
> >(PLEXIL::ArrayImpl<int> const*&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<double>
> >::getValueImpl<bool>(bool&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<double>
> >::getValueImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >(std::__cxx11::basic_string<char, std::char_traits<char>,
> std::allocator<char> >&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<int>
> >::setValueImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >(PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > > const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::AssignableImpl<int>::getMutableValuePointerImpl<PLEXIL::ArrayImpl<double>
> >(PLEXIL::ArrayImpl<double>*&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >::setValueImpl<int>(int const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<int>
> >::getValuePointerImpl<PLEXIL::ArrayImpl<double>
> >(PLEXIL::ArrayImpl<double> const*&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<double>
> >::getValueImpl<int>(int&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::AssignableImpl<int>::getMutableValuePointerImpl<PLEXIL::Array>(PLEXIL::Array*&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<double>::setValueImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >(PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > > const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<int>
> >::getMutableValuePointerImpl<PLEXIL::ArrayImpl<bool>
> >(PLEXIL::ArrayImpl<bool>*&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<bool>
> >::getValueImpl<unsigned short>(unsigned short&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<int>
> >::getValueImpl<unsigned short>(unsigned short&) const'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<bool>
> >::setValueImpl<bool>(bool const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::AssignableImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >
> >::getMutableValuePointerImpl<PLEXIL::Array>(PLEXIL::Array*&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `void
> PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<bool>
> >::setValueImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >
> >(PLEXIL::ArrayImpl<std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> > > const&)'
> ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool
> PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<int>
> >::getValuePointerImpl<PLEXIL::ArrayImpl<bool>
> >(PLEXIL::ArrayImpl<bool> const*&) const'
> collect2: error: ld returned 1 exit status
> Makefile:346: recipe for target 'TestExec' failed
> make[2]: *** [TestExec] Error 1
> make[2]: Leaving directory
> '/root/Desktop/plexil-4.0.1/src/apps/TestExec'
> Makefile:352: recipe for target 'all-recursive' failed
> make[1]: *** [all-recursive] Error 1
> make[1]: Leaving directory '/root/Desktop/plexil-4.0.1/src'
> Makefile:283: recipe for target 'all' failed
> make: *** [all] Error 2
>
> (Only the relevant part is posted)
> Seems like a linker error similar to the one described here
> <http://stackoverflow.com/questions/25002328/exported-symbols-in-o-file-not-getting-exported-in-dylib>
>
> Any workarounds/fixes or do I have to transfer code from the .cc files
> to .hh files?
> Doesn't seem like I can make do without TestExec.
>
> Thank You
>
>
> ------------------------------------------------------------------------------
> Developer Access Program for Intel Xeon Phi Processors
> Access to Intel Xeon Phi processor-based developer platforms.
> With one year of Intel Parallel Studio XE.
> Training and support from Colfax.
> Order your platform today.http://sdm.link/intel
>
>
> _______________________________________________
> plexil-support mailing list
> ple...@li...
> https://lists.sourceforge.net/lists/listinfo/plexil-support
|
|
From: Dipankar N. <dip...@gm...> - 2016-12-20 20:50:03
|
Hello, I was executing 'Make' in the 'plexil-4.0.1' directory. (top level makefile) I'm running into the following log: Making all in apps/TestExec > make[2]: Entering directory '/root/Desktop/plexil-4.0.1/src/apps/TestExec' > g++ -DHAVE_CONFIG_H -I. -I../.. -I../../app-framework -I../../xml-parser > -I../../third-party/pugixml/src -I../../exec -I../../intfc -I../../expr > -I../../value -I../../utils -I../../interfaces/PlanDebugListener > -I../../interfaces/LuvListener -I../../interfaces/Sockets -g -O2 -MT > TestExec-exec-test-runner.o -MD -MP -MF .deps/TestExec-exec-test-runner.Tpo > -c -o TestExec-exec-test-runner.o `test -f 'exec-test-runner.cc' || echo > './'`exec-test-runner.cc > mv -f .deps/TestExec-exec-test-runner.Tpo > .deps/TestExec-exec-test-runner.Po > g++ -DHAVE_CONFIG_H -I. -I../.. -I../../app-framework -I../../xml-parser > -I../../third-party/pugixml/src -I../../exec -I../../intfc -I../../expr > -I../../value -I../../utils -I../../interfaces/PlanDebugListener > -I../../interfaces/LuvListener -I../../interfaces/Sockets -g -O2 -MT > TestExec-ExecTestRunner.o -MD -MP -MF .deps/TestExec-ExecTestRunner.Tpo -c > -o TestExec-ExecTestRunner.o `test -f 'ExecTestRunner.cc' || echo > './'`ExecTestRunner.cc > mv -f .deps/TestExec-ExecTestRunner.Tpo .deps/TestExec-ExecTestRunner.Po > g++ -DHAVE_CONFIG_H -I. -I../.. -I../../app-framework -I../../xml-parser > -I../../third-party/pugixml/src -I../../exec -I../../intfc -I../../expr > -I../../value -I../../utils -I../../interfaces/PlanDebugListener > -I../../interfaces/LuvListener -I../../interfaces/Sockets -g -O2 -MT > TestExec-TestExternalInterface.o -MD -MP -MF > .deps/TestExec-TestExternalInterface.Tpo -c -o > TestExec-TestExternalInterface.o `test -f 'TestExternalInterface.cc' || > echo './'`TestExternalInterface.cc > mv -f .deps/TestExec-TestExternalInterface.Tpo > .deps/TestExec-TestExternalInterface.Po > /bin/bash ../../libtool --tag=CXX --mode=link g++ -g -O2 -o TestExec > TestExec-exec-test-runner.o TestExec-ExecTestRunner.o > TestExec-TestExternalInterface.o > ../../interfaces/PlanDebugListener/libPlanDebugListener.la > ../../interfaces/LuvListener/libLuvListener.la > ../../interfaces/Sockets/libPlexilSockets.la > ../../app-framework/libPlexilAppFramework.la > ../../xml-parser/libPlexilXmlParser.la ../../third-party/pugixml/src/ > libpugixml.la ../../exec/libPlexilExec.la ../../intfc/libPlexilIntfc.la > ../../expr/libPlexilExpr.la ../../value/libPlexilValue.la > ../../utils/libPlexilUtils.la -lnsl -lm -lrt -lpthread -ldl > libtool: link: g++ -g -O2 -o .libs/TestExec TestExec-exec-test-runner.o > TestExec-ExecTestRunner.o TestExec-TestExternalInterface.o > ../../interfaces/PlanDebugListener/.libs/libPlanDebugListener.so > ../../interfaces/LuvListener/.libs/libLuvListener.so > ../../interfaces/Sockets/.libs/libPlexilSockets.so > ../../app-framework/.libs/libPlexilAppFramework.so > ../../xml-parser/.libs/libPlexilXmlParser.so > ../../third-party/pugixml/src/.libs/libpugixml.so > ../../exec/.libs/libPlexilExec.so ../../intfc/.libs/libPlexilIntfc.so > ../../expr/.libs/libPlexilExpr.so ../../value/.libs/libPlexilValue.so > ../../utils/.libs/libPlexilUtils.so -lnsl -lm -lrt -lpthread -ldl > -Wl,-rpath -Wl,/root/Desktop/plexil-4.0.1/lib > ../../exec/.libs/libPlexilExec.so: undefined reference to `bool > PLEXIL::ExpressionImpl<double>::getValueImpl<unsigned short>(unsigned > short&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > > >::getValuePointerImpl<PLEXIL::ArrayImpl<bool> >(PLEXIL::ArrayImpl<bool> > const*&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<bool>::setValueImpl<double>(double const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<int> > >::getValueImpl<double>(double&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<double> > >::getValuePointerImpl<PLEXIL::ArrayImpl<bool> >(PLEXIL::ArrayImpl<bool> > const*&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<int> > >::getMutableValuePointerImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > > >(PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > >*&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::AssignableImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >::getMutableValuePointerImpl<PLEXIL::ArrayImpl<double> > >(PLEXIL::ArrayImpl<double>*&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<double>::setValueImpl<PLEXIL::ArrayImpl<int> > >(PLEXIL::ArrayImpl<int> const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::AssignableImpl<int>::getMutableValuePointerImpl<PLEXIL::ArrayImpl<int> > >(PLEXIL::ArrayImpl<int>*&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >::getValueImpl<unsigned > short>(unsigned short&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<int>::setValueImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >(std::__cxx11::basic_string<char, std::char_traits<char>, > std::allocator<char> > const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<int> >::getValueImpl<int>(int&) > const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<int>::setValueImpl<unsigned short>(unsigned short > const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<int>::getValueImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >(std::__cxx11::basic_string<char, std::char_traits<char>, > std::allocator<char> >&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > > >::setValueImpl<PLEXIL::ArrayImpl<int> >(PLEXIL::ArrayImpl<int> const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<bool>::getValueImpl<unsigned short>(unsigned short&) > const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<bool> > >::getValuePointerImpl<PLEXIL::ArrayImpl<int> >(PLEXIL::ArrayImpl<int> > const*&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<double>::setValueImpl<PLEXIL::ArrayImpl<double> > >(PLEXIL::ArrayImpl<double> const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<int>::setValueImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > > >(PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::AssignableImpl<bool>::getMutableValuePointerImpl<PLEXIL::ArrayImpl<bool> > >(PLEXIL::ArrayImpl<bool>*&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<double> > >::getValuePointerImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >(std::__cxx11::basic_string<char, std::char_traits<char>, > std::allocator<char> > const*&) const' > ../../exec/.libs/libPlexilExec.so: undefined reference to `bool > PLEXIL::ExpressionImpl<double>::getValuePointerImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > > >(PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > const*&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<bool>::getValuePointerImpl<PLEXIL::ArrayImpl<double> > >(PLEXIL::ArrayImpl<double> const*&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<double> > >::getValuePointerImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > > >(PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > const*&) const' > ../../exec/.libs/libPlexilExec.so: undefined reference to `bool > PLEXIL::ExpressionImpl<unsigned > short>::getValuePointerImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > > >(PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > const*&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<bool> > >::getMutableValuePointerImpl<PLEXIL::ArrayImpl<int> > >(PLEXIL::ArrayImpl<int>*&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<bool> > >::setValueImpl<std::__cxx11::basic_string<char, std::char_traits<char>, > std::allocator<char> > >(std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >::setValueImpl<PLEXIL::ArrayImpl<double> >(PLEXIL::ArrayImpl<double> > const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::AssignableImpl<int>::getMutableValuePointerImpl<PLEXIL::ArrayImpl<bool> > >(PLEXIL::ArrayImpl<bool>*&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<bool>::setValueImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > > >(PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > const&)' > ../../exec/.libs/libPlexilExec.so: undefined reference to `bool > PLEXIL::ExpressionImpl<unsigned > short>::getValuePointerImpl<PLEXIL::ArrayImpl<bool> > >(PLEXIL::ArrayImpl<bool> const*&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > > >::getMutableValuePointerImpl<PLEXIL::ArrayImpl<bool> > >(PLEXIL::ArrayImpl<bool>*&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >::setValueImpl<PLEXIL::ArrayImpl<int> >(PLEXIL::ArrayImpl<int> const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::AssignableImpl<double>::getMutableValuePointerImpl<PLEXIL::Array>(PLEXIL::Array*&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<double> > >::getMutableValuePointerImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > > >(PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > >*&)' > ../../exec/.libs/libPlexilExec.so: undefined reference to `bool > PLEXIL::ExpressionImpl<double>::getValueImpl<bool>(bool&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<bool> > >::getValueImpl<double>(double&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >::setValueImpl<bool>(bool > const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::AssignableImpl<double>::getMutableValuePointerImpl<PLEXIL::ArrayImpl<int> > >(PLEXIL::ArrayImpl<int>*&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >::setValueImpl<int>(int > const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<int>::getValuePointerImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > > >(PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > const*&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<bool>::setValueImpl<PLEXIL::ArrayImpl<double> > >(PLEXIL::ArrayImpl<double> const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::AssignableImpl<double>::getMutableValuePointerImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >(std::__cxx11::basic_string<char, std::char_traits<char>, > std::allocator<char> >*&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<double> > >::setValueImpl<double>(double const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<double>::setValueImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >(std::__cxx11::basic_string<char, std::char_traits<char>, > std::allocator<char> > const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<bool>::getValuePointerImpl<PLEXIL::Array>(PLEXIL::Array > const*&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >::getValuePointerImpl<PLEXIL::ArrayImpl<bool> >(PLEXIL::ArrayImpl<bool> > const*&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<bool>::getValuePointerImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >(std::__cxx11::basic_string<char, std::char_traits<char>, > std::allocator<char> > const*&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::AssignableImpl<double>::getMutableValuePointerImpl<PLEXIL::ArrayImpl<double> > >(PLEXIL::ArrayImpl<double>*&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<double>::setValueImpl<unsigned short>(unsigned short > const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<int> >::setValueImpl<int>(int > const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<int>::setValueImpl<PLEXIL::ArrayImpl<double> > >(PLEXIL::ArrayImpl<double> const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::AssignableImpl<double>::getMutableValuePointerImpl<PLEXIL::ArrayImpl<bool> > >(PLEXIL::ArrayImpl<bool>*&)' > ../../exec/.libs/libPlexilExec.so: undefined reference to `bool > PLEXIL::ExpressionImpl<double>::getValuePointerImpl<PLEXIL::Array>(PLEXIL::Array > const*&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<int> >::getValueImpl<bool>(bool&) > const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > >::getValueImpl<bool>(bool&) > const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > > >::getValuePointerImpl<PLEXIL::ArrayImpl<double> > >(PLEXIL::ArrayImpl<double> const*&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<bool>::setValueImpl<int>(int const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<int>::getValuePointerImpl<PLEXIL::Array>(PLEXIL::Array > const*&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<int>::setValueImpl<PLEXIL::ArrayImpl<int> > >(PLEXIL::ArrayImpl<int> const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<bool>::getValuePointerImpl<PLEXIL::ArrayImpl<int> > >(PLEXIL::ArrayImpl<int> const*&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<double> > >::getMutableValuePointerImpl<PLEXIL::ArrayImpl<bool> > >(PLEXIL::ArrayImpl<bool>*&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::AssignableImpl<bool>::getMutableValuePointerImpl<PLEXIL::ArrayImpl<int> > >(PLEXIL::ArrayImpl<int>*&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<int>::getValuePointerImpl<PLEXIL::ArrayImpl<int> > >(PLEXIL::ArrayImpl<int> const*&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<double>::setValueImpl<bool>(bool const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >::setValueImpl<double>(double const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > >::setValueImpl<unsigned > short>(unsigned short const&)' > ../../exec/.libs/libPlexilExec.so: undefined reference to `bool > PLEXIL::ExpressionImpl<unsigned short>::getValueImpl<int>(int&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >::getValuePointerImpl<PLEXIL::Array>(PLEXIL::Array const*&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<double> > >::getValueImpl<double>(double&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<double> > >::setValueImpl<PLEXIL::ArrayImpl<int> >(PLEXIL::ArrayImpl<int> const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > > >::setValueImpl<double>(double const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<int>::setValueImpl<double>(double const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::AssignableImpl<bool>::getMutableValuePointerImpl<PLEXIL::ArrayImpl<double> > >(PLEXIL::ArrayImpl<double>*&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >::setValueImpl<unsigned > short>(unsigned short const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<bool> >::getValueImpl<bool>(bool&) > const' > ../../exec/.libs/libPlexilExec.so: undefined reference to `bool > PLEXIL::ExpressionImpl<double>::getValuePointerImpl<PLEXIL::ArrayImpl<bool> > >(PLEXIL::ArrayImpl<bool> const*&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<int>::setValueImpl<bool>(bool const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > > >::getMutableValuePointerImpl<PLEXIL::ArrayImpl<int> > >(PLEXIL::ArrayImpl<int>*&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<int> > >::setValueImpl<std::__cxx11::basic_string<char, std::char_traits<char>, > std::allocator<char> > >(std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<int>::getValuePointerImpl<PLEXIL::ArrayImpl<bool> > >(PLEXIL::ArrayImpl<bool> const*&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > >::getValueImpl<unsigned > short>(unsigned short&) const' > ../../exec/.libs/libPlexilExec.so: undefined reference to `bool > PLEXIL::ExpressionImpl<unsigned > short>::getValuePointerImpl<PLEXIL::Array>(PLEXIL::Array const*&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >::getValueImpl<int>(int&) > const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<bool> >::setValueImpl<unsigned > short>(unsigned short const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<double> > >::getMutableValuePointerImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >(std::__cxx11::basic_string<char, std::char_traits<char>, > std::allocator<char> >*&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<int> >::setValueImpl<unsigned > short>(unsigned short const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<int> > >::getValueImpl<std::__cxx11::basic_string<char, std::char_traits<char>, > std::allocator<char> > >(std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> >&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<bool> >::getValueImpl<int>(int&) > const' > ../../exec/.libs/libPlexilExec.so: undefined reference to `bool > PLEXIL::ExpressionImpl<unsigned short>::getValueImpl<bool>(bool&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<int> > >::getMutableValuePointerImpl<PLEXIL::ArrayImpl<double> > >(PLEXIL::ArrayImpl<double>*&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<double> > >::setValueImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > > >(PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<bool>::setValueImpl<unsigned short>(unsigned short > const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<bool>::setValueImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >(std::__cxx11::basic_string<char, std::char_traits<char>, > std::allocator<char> > const&)' > ../../exec/.libs/libPlexilExec.so: undefined reference to `bool > PLEXIL::ExpressionImpl<unsigned > short>::getValueImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >(std::__cxx11::basic_string<char, std::char_traits<char>, > std::allocator<char> >&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > > >::getValueImpl<double>(double&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<int>::setValueImpl<PLEXIL::ArrayImpl<bool> > >(PLEXIL::ArrayImpl<bool> const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > > >::getMutableValuePointerImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >(std::__cxx11::basic_string<char, std::char_traits<char>, > std::allocator<char> >*&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<bool> > >::setValueImpl<double>(double const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::AssignableImpl<int>::getMutableValuePointerImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > > >(PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > >*&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::AssignableImpl<bool>::getMutableValuePointerImpl<PLEXIL::Array>(PLEXIL::Array*&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<double>::setValueImpl<PLEXIL::ArrayImpl<bool> > >(PLEXIL::ArrayImpl<bool> const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::AssignableImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >::getMutableValuePointerImpl<PLEXIL::ArrayImpl<bool> > >(PLEXIL::ArrayImpl<bool>*&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::AssignableImpl<bool>::getMutableValuePointerImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > > >(PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > >*&)' > ../../exec/.libs/libPlexilExec.so: undefined reference to `bool > PLEXIL::ExpressionImpl<double>::getValuePointerImpl<PLEXIL::ArrayImpl<double> > >(PLEXIL::ArrayImpl<double> const*&) const' > ../../exec/.libs/libPlexilExec.so: undefined reference to `bool > PLEXIL::ExpressionImpl<double>::getValueImpl<int>(int&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<bool> > >::setValueImpl<PLEXIL::ArrayImpl<int> >(PLEXIL::ArrayImpl<int> const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<bool> > >::getMutableValuePointerImpl<PLEXIL::ArrayImpl<double> > >(PLEXIL::ArrayImpl<double>*&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<bool>::getValuePointerImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > > >(PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > const*&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >::setValueImpl<PLEXIL::ArrayImpl<bool> >(PLEXIL::ArrayImpl<bool> const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > > >::getMutableValuePointerImpl<PLEXIL::ArrayImpl<double> > >(PLEXIL::ArrayImpl<double>*&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > > >::getValuePointerImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >(std::__cxx11::basic_string<char, std::char_traits<char>, > std::allocator<char> > const*&) const' > ../../exec/.libs/libPlexilExec.so: undefined reference to `bool > PLEXIL::ExpressionImpl<double>::getValueImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >(std::__cxx11::basic_string<char, std::char_traits<char>, > std::allocator<char> >&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > > >::setValueImpl<PLEXIL::ArrayImpl<double> >(PLEXIL::ArrayImpl<double> > const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<bool> >::setValueImpl<int>(int > const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<bool> > >::getValuePointerImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >(std::__cxx11::basic_string<char, std::char_traits<char>, > std::allocator<char> > const*&) const' > ../../exec/.libs/libPlexilExec.so: undefined reference to `bool > PLEXIL::ExpressionImpl<double>::getValuePointerImpl<PLEXIL::ArrayImpl<int> > >(PLEXIL::ArrayImpl<int> const*&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >::getValueImpl<double>(double&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<bool> > >::getValuePointerImpl<PLEXIL::ArrayImpl<double> > >(PLEXIL::ArrayImpl<double> const*&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > > >::setValueImpl<std::__cxx11::basic_string<char, std::char_traits<char>, > std::allocator<char> > >(std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<int> > >::getMutableValuePointerImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >(std::__cxx11::basic_string<char, std::char_traits<char>, > std::allocator<char> >*&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<double> >::setValueImpl<unsigned > short>(unsigned short const&)' > ../../exec/.libs/libPlexilExec.so: undefined reference to `bool > PLEXIL::ExpressionImpl<double>::getValuePointerImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >(std::__cxx11::basic_string<char, std::char_traits<char>, > std::allocator<char> > const*&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::AssignableImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >::getMutableValuePointerImpl<PLEXIL::ArrayImpl<int> > >(PLEXIL::ArrayImpl<int>*&)' > ../../exec/.libs/libPlexilExec.so: undefined reference to `bool > PLEXIL::ExpressionImpl<unsigned short>::getValueImpl<double>(double&) const' > ../../exec/.libs/libPlexilExec.so: undefined reference to `bool > PLEXIL::ExpressionImpl<unsigned > short>::getValuePointerImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >(std::__cxx11::basic_string<char, std::char_traits<char>, > std::allocator<char> > const*&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<int> > >::setValueImpl<PLEXIL::ArrayImpl<bool> >(PLEXIL::ArrayImpl<bool> const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > > >::getValueImpl<std::__cxx11::basic_string<char, std::char_traits<char>, > std::allocator<char> > >(std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> >&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > >::setValueImpl<bool>(bool > const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<int>::getValuePointerImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >(std::__cxx11::basic_string<char, std::char_traits<char>, > std::allocator<char> > const*&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<double> >::setValueImpl<bool>(bool > const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > > >::getValuePointerImpl<PLEXIL::ArrayImpl<int> >(PLEXIL::ArrayImpl<int> > const*&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::AssignableImpl<int>::getMutableValuePointerImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >(std::__cxx11::basic_string<char, std::char_traits<char>, > std::allocator<char> >*&)' > ../../exec/.libs/libPlexilExec.so: undefined reference to `bool > PLEXIL::ExpressionImpl<unsigned > short>::getValuePointerImpl<PLEXIL::ArrayImpl<double> > >(PLEXIL::ArrayImpl<double> const*&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<int>::getValuePointerImpl<PLEXIL::ArrayImpl<double> > >(PLEXIL::ArrayImpl<double> const*&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<double> > >::setValueImpl<PLEXIL::ArrayImpl<bool> >(PLEXIL::ArrayImpl<bool> const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >::getValuePointerImpl<PLEXIL::ArrayImpl<double> > >(PLEXIL::ArrayImpl<double> const*&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<int> > >::setValueImpl<PLEXIL::ArrayImpl<double> >(PLEXIL::ArrayImpl<double> > const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::AssignableImpl<bool>::getMutableValuePointerImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >(std::__cxx11::basic_string<char, std::char_traits<char>, > std::allocator<char> >*&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<int>::getValueImpl<unsigned short>(unsigned short&) > const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > > >::getValueImpl<bool>(bool&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<int> > >::getValuePointerImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >(std::__cxx11::basic_string<char, std::char_traits<char>, > std::allocator<char> > const*&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<bool>::getValueImpl<double>(double&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<bool>::getValuePointerImpl<PLEXIL::ArrayImpl<bool> > >(PLEXIL::ArrayImpl<bool> const*&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<double> > >::setValueImpl<std::__cxx11::basic_string<char, std::char_traits<char>, > std::allocator<char> > >(std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<bool> > >::setValueImpl<PLEXIL::ArrayImpl<double> >(PLEXIL::ArrayImpl<double> > const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<double> >::setValueImpl<int>(int > const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<int>::getValueImpl<bool>(bool&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<double> >::getValueImpl<unsigned > short>(unsigned short&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<int> > >::setValueImpl<double>(double const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<int> > >::getValuePointerImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > > >(PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > const*&) const' > ../../exec/.libs/libPlexilExec.so: undefined reference to `bool > PLEXIL::ExpressionImpl<unsigned > short>::getValuePointerImpl<PLEXIL::ArrayImpl<int> >(PLEXIL::ArrayImpl<int> > const*&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<bool>::setValueImpl<PLEXIL::ArrayImpl<bool> > >(PLEXIL::ArrayImpl<bool> const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<bool>::getValueImpl<int>(int&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<int> >::setValueImpl<bool>(bool > const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<double> > >::getMutableValuePointerImpl<PLEXIL::ArrayImpl<int> > >(PLEXIL::ArrayImpl<int>*&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > > >::setValueImpl<PLEXIL::ArrayImpl<bool> >(PLEXIL::ArrayImpl<bool> const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<bool>::setValueImpl<PLEXIL::ArrayImpl<int> > >(PLEXIL::ArrayImpl<int> const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<bool> > >::getMutableValuePointerImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >(std::__cxx11::basic_string<char, std::char_traits<char>, > std::allocator<char> >*&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >::getValuePointerImpl<PLEXIL::ArrayImpl<int> >(PLEXIL::ArrayImpl<int> > const*&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<double> > >::getValuePointerImpl<PLEXIL::ArrayImpl<int> >(PLEXIL::ArrayImpl<int> > const*&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<double> > >::getValueImpl<bool>(bool&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<double> > >::getValueImpl<std::__cxx11::basic_string<char, std::char_traits<char>, > std::allocator<char> > >(std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> >&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<int> > >::setValueImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > > >(PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::AssignableImpl<int>::getMutableValuePointerImpl<PLEXIL::ArrayImpl<double> > >(PLEXIL::ArrayImpl<double>*&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > >::setValueImpl<int>(int > const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<int> > >::getValuePointerImpl<PLEXIL::ArrayImpl<double> > >(PLEXIL::ArrayImpl<double> const*&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<double> >::getValueImpl<int>(int&) > const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::AssignableImpl<int>::getMutableValuePointerImpl<PLEXIL::Array>(PLEXIL::Array*&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<double>::setValueImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > > >(PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<int> > >::getMutableValuePointerImpl<PLEXIL::ArrayImpl<bool> > >(PLEXIL::ArrayImpl<bool>*&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<bool> >::getValueImpl<unsigned > short>(unsigned short&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<int> >::getValueImpl<unsigned > short>(unsigned short&) const' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<bool> >::setValueImpl<bool>(bool > const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::AssignableImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > >::getMutableValuePointerImpl<PLEXIL::Array>(PLEXIL::Array*&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `void > PLEXIL::AssignableImpl<PLEXIL::ArrayImpl<bool> > >::setValueImpl<PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > > >(PLEXIL::ArrayImpl<std::__cxx11::basic_string<char, > std::char_traits<char>, std::allocator<char> > > const&)' > ../../expr/.libs/libPlexilExpr.so: undefined reference to `bool > PLEXIL::ExpressionImpl<PLEXIL::ArrayImpl<int> > >::getValuePointerImpl<PLEXIL::ArrayImpl<bool> >(PLEXIL::ArrayImpl<bool> > const*&) const' > collect2: error: ld returned 1 exit status > Makefile:346: recipe for target 'TestExec' failed > make[2]: *** [TestExec] Error 1 > make[2]: Leaving directory '/root/Desktop/plexil-4.0.1/src/apps/TestExec' > Makefile:352: recipe for target 'all-recursive' failed > make[1]: *** [all-recursive] Error 1 > make[1]: Leaving directory '/root/Desktop/plexil-4.0.1/src' > Makefile:283: recipe for target 'all' failed > make: *** [all] Error 2 > > (Only the relevant part is posted) Seems like a linker error similar to the one described here < http://stackoverflow.com/questions/25002328/exported-symbols-in-o-file-not-getting-exported-in-dylib > Any workarounds/fixes or do I have to transfer code from the .cc files to .hh files? Doesn't seem like I can make do without TestExec. Thank You |
|
From: Fry, C. R. {C. (ARC-TI)[S. INC] <chu...@na...> - 2016-02-25 22:53:50
|
Hi Héctor. I'm working to a deadline at the moment but I will try to reproduce and analyze this later today.
-- Chuck
On Feb 25, 2016, at 2:35 PM, Hector Cadavid <hec...@gm...<mailto:hec...@gm...>> wrote:
Dear PLEXIL support team,
I have been working for few months in the implementation in the control layer of an autonomous farming robot. I already implemented an adapter to connect a Plexil’s plan with the robot’s hardware, and it worked great.
However, today I’m facing a problem with the Wait action. I have some actions that should perform periodically, so, based on the documentation and examples included in the ‘temporal’ folder, I included an action that is repeated every N seconds. The problem: the action is repeated a different number of times each time it’s executed. Some times the plan is completed, and sometimes the plan execution get stuck in a ‘Wait’ execution:
[Node:transition]Transitioning 'Wait__3' from INACTIVE to WAITING at 1456438554.29645<tel://1456438554.29645>
[Node:transition]Transitioning 'Wait__3' from WAITING to EXECUTING at 1456438554.29645<tel://1456438554.29645>
[Node:clock]Node 'Wait__3' started at 1456438554.29645<tel://1456438554.29645>
<— Execution stuck indefinitely
I wrote this basic plan to analyse the problem:
Command pprint (...);
CountIteration:
{
Boolean continue=true;
Duration delay = Duration ("PT0.5S");
Duration tolerance = Duration ("PT0.1S");
Integer stepsCount=0;
PeriodicIteration:
{
Repeat continue;
stepsCount=stepsCount+1;
pprint ("steps Performed: ", stepsCount);
Sequence{
Delay:{
Wait (delay*2),tolerance;
}
ConditionallyEndIteration:
{
Skip stepsCount<20;
continue = false;
pprint ("Ending periodic iteration");
}
}
}
}
In my test environment (Mac OSX / Plexil 4.0.1), only sometimes the plan is finished. Most of the times, the plan get stuck randomly at different points (stepsCount=2, stepsCount=9…).
Could you please tell me… am I doing something wrong?… Any advice is really welcome!
Sincerely yours,
Héctor Cadavid
------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140_______________________________________________
plexil-support mailing list
ple...@li...
https://lists.sourceforge.net/lists/listinfo/plexil-support
Chuck Fry | QTS Inc.
Office: 650 604 1882 Mobile: 408 230 2715
M/S 269-1, Building N269/260-7
NASA Ames Research Center
Moffett Field, CA 94035-1000
I do not speak for QTS Inc., SGT, Code TI, or NASA, nor do they speak for me.
|
|
From: Hector C. <hec...@gm...> - 2016-02-25 22:35:11
|
Dear PLEXIL support team,
I have been working for few months in the implementation in the control
layer of an autonomous farming robot. I already implemented an adapter to
connect a Plexil’s plan with the robot’s hardware, and it worked great.
However, today I’m facing a problem with the Wait action. I have some
actions that should perform periodically, so, based on the documentation
and examples included in the ‘temporal’ folder, I included an action that
is repeated every N seconds. The problem: the action is repeated a
different number of times each time it’s executed. Some times the plan is
completed, and sometimes the plan execution get stuck in a ‘Wait’ execution:
[Node:transition]Transitioning 'Wait__3' from INACTIVE to WAITING at
1456438554.29645 <//1456438554.29645>
[Node:transition]Transitioning 'Wait__3' from WAITING to EXECUTING at
1456438554.29645 <//1456438554.29645>
[Node:clock]Node 'Wait__3' started at 1456438554.29645 <//1456438554.29645>
<— Execution stuck indefinitely
I wrote this basic plan to analyse the problem:
Command pprint (...);
CountIteration:
{
Boolean continue=true;
Duration delay = Duration ("PT0.5S");
Duration tolerance = Duration ("PT0.1S");
Integer stepsCount=0;
PeriodicIteration:
{
Repeat continue;
stepsCount=stepsCount+1;
pprint ("steps Performed: ", stepsCount);
Sequence{
Delay:{
Wait (delay*2),tolerance;
}
ConditionallyEndIteration:
{
Skip stepsCount<20;
continue = false;
pprint ("Ending periodic iteration");
}
}
}
}
In my test environment (Mac OSX / Plexil 4.0.1), only sometimes the plan is
finished. Most of the times, the plan get stuck randomly at different
points (stepsCount=2, stepsCount=9…).
Could you please tell me… am I doing something wrong?… Any advice is really
welcome!
Sincerely yours,
Héctor Cadavid
|
|
From: Dalal, M. (ARC-TI)[S. INC] <mic...@na...> - 2015-11-25 21:27:25
|
Hello Diego,
Sorry for the delay. Perhaps you've solved this problem by now, but please see comments inserted below in case they are helpful.
On Nov 23, 2015, at 7:12 AM, López Pajares Diego <die...@ed...<mailto:die...@ed...>> wrote:
Dear PLEXIL support:
Thanks for the reply, now LookUpOnChange works fine. Anyway, I'm still having troubles with my application. Particurarly, what I want to do is the following:
- I have a command node that executes a function implemented by means of a RPC server.
- I want to control previous command timeout using LookupOnChange, so I'm able to finish the previous command if timeout.
- I have a command that can stop the RPC command.
I tried to do this in different ways. I tried to use the synchronous command node but it fails (due to the invariant condition).
Which invariant condition are you referring to?
Following is the PLEXIL node implementation:
String Command moveto(String pos);
//************************************************
MoveTo:
{
SynchronousCommand cpos=moveto(object_dest) Timeout 3.0, 1.0;
}
This looks like a good approach. If it didn't work, please describe more about how it failed.
Also, I tried to do it in two concurrence nodes. It evaluates the timer only at the beggining and at the end of the command execution, and thus, the timeout is not working. Following is the PLEXIL code:
String Command moveto(String pos);
//***********************************************************
TimerNode:
{
EndCondition LookupOnChange(time,1)>=now+5 || Locomotion.outcome==SUCCESS;
}
Locomotion:
{
PostCondition cpos=="c13_15"
cpos=moveto(object_dest);
}
I would guess that Locomotion would fail almost immediately, because you do not wait for moveto to return, and hence cpos would have the value UNKNOWN when the node ends. Adding
EndCondition isKnown(cpos);
would remedy this. It would also keep Locomotion running long enough for TimerNode (which looks fine) to possibly be useful.
Best,
Mike
|
|
From: López P. D. <die...@ed...> - 2015-11-23 15:12:16
|
Dear PLEXIL support:
Thanks for the reply, now LookUpOnChange works fine. Anyway, I'm still having troubles with my application. Particurarly, what I want to do is the following:
- I have a command node that executes a function implemented by means of a RPC server.
- I want to control previous command timeout using LookupOnChange, so I'm able to finish the previous command if timeout.
- I have a command that can stop the RPC command.
I tried to do this in different ways. I tried to use the synchronous command node but it fails (due to the invariant condition). Following is the PLEXIL node implementation:
String Command moveto(String pos);
//************************************************
MoveTo:
{
SynchronousCommand cpos=moveto(object_dest) Timeout 3.0, 1.0;
}
Also, I tried to do it in two concurrence nodes. It evaluates the timer only at the beggining and at the end of the command execution, and thus, the timeout is not working. Following is the PLEXIL code:
String Command moveto(String pos);
//***********************************************************
TimerNode:
{
EndCondition LookupOnChange(time,1)>=now+5 || Locomotion.outcome==SUCCESS;
}
Locomotion:
{
PostCondition cpos=="c13_15"
cpos=moveto(object_dest);
}
Thanks in advance,
Diego.
________________________________
De: Dalal, Michael (ARC-TI)[SGT, INC] <mic...@na...>
Enviado: miércoles, 18 de noviembre de 2015 19:38
Para: López Pajares Diego
Cc: Fry, Charles R. {Chuck} (ARC-TI)[SGT, INC]; ple...@li...
Asunto: Re: [plexil-support] Problem with LookupOnChange
I've revised the PLEXIL reference accordingly. Our apologies for this omission.
Thanks for your interest in PLEXIL.
Mike
K. Michael Dalal
SGT Inc. at NASA Ames Research Center
*Opinions expressed herein are my own*
LookupOnChange for time requires a tolerance argument.
For your example, you could use:
LookupOnChange(time, 1)
or
LookupOnChange(time, 15)
I hope this is helpful.
-- Chuck
On Nov 18, 2015, at 9:53 AM, López Pajares Diego <die...@ed...<mailto:die...@ed...>> wrote:
Dear PLEXIL support:
I'm using PLEXIL for operate a robot in a research project of the Universidad de Alcalá. I have a problem with a LookupOnChange for make a timer. At present I use OSNativeTime as time adapter, and the node which contains the timer is the next:
Timer:
{
Real now;
EndCondition LookupOnChange(time)>now+15;
now=LookupNow(time);
}
(15 are the seconds for stop the timer).
When I execute this node never ends.
NOTE: PLEXIL version is 2.5.
I would appreciate more information about LookupOnChange, and sorry if my english is very bad.
A greeting
Diego.
------------------------------------------------------------------------------
_______________________________________________
plexil-support mailing list
ple...@li...<mailto:ple...@li...>
https://lists.sourceforge.net/lists/listinfo/plexil-support
|
|
From: Dalal, M. (ARC-TI)[S. INC] <mic...@na...> - 2015-11-18 18:43:26
|
I've revised the PLEXIL reference accordingly. Our apologies for this omission.
Thanks for your interest in PLEXIL.
Mike
K. Michael Dalal
SGT Inc. at NASA Ames Research Center
*Opinions expressed herein are my own*
LookupOnChange for time requires a tolerance argument.
For your example, you could use:
LookupOnChange(time, 1)
or
LookupOnChange(time, 15)
I hope this is helpful.
-- Chuck
On Nov 18, 2015, at 9:53 AM, López Pajares Diego <die...@ed...<mailto:die...@ed...>> wrote:
Dear PLEXIL support:
I'm using PLEXIL for operate a robot in a research project of the Universidad de Alcalá. I have a problem with a LookupOnChange for make a timer. At present I use OSNativeTime as time adapter, and the node which contains the timer is the next:
Timer:
{
Real now;
EndCondition LookupOnChange(time)>now+15;
now=LookupNow(time);
}
(15 are the seconds for stop the timer).
When I execute this node never ends.
NOTE: PLEXIL version is 2.5.
I would appreciate more information about LookupOnChange, and sorry if my english is very bad.
A greeting
Diego.
------------------------------------------------------------------------------
_______________________________________________
plexil-support mailing list
ple...@li...<mailto:ple...@li...>
https://lists.sourceforge.net/lists/listinfo/plexil-support
|
|
From: Fry, C. R. {C. (ARC-TI)[S. INC] <chu...@na...> - 2015-11-18 18:17:26
|
LookupOnChange for time requires a tolerance argument.
For your example, you could use:
LookupOnChange(time, 1)
or
LookupOnChange(time, 15)
I hope this is helpful.
-- Chuck
On Nov 18, 2015, at 9:53 AM, López Pajares Diego <die...@ed...<mailto:die...@ed...>> wrote:
Dear PLEXIL support:
I'm using PLEXIL for operate a robot in a research project of the Universidad de Alcalá. I have a problem with a LookupOnChange for make a timer. At present I use OSNativeTime as time adapter, and the node which contains the timer is the next:
Timer:
{
Real now;
EndCondition LookupOnChange(time)>now+15;
now=LookupNow(time);
}
(15 are the seconds for stop the timer).
When I execute this node never ends.
NOTE: PLEXIL version is 2.5.
I would appreciate more information about LookupOnChange, and sorry if my english is very bad.
A greeting
Diego.
------------------------------------------------------------------------------
_______________________________________________
plexil-support mailing list
ple...@li...<mailto:ple...@li...>
https://lists.sourceforge.net/lists/listinfo/plexil-support
Chuck Fry | QTS Inc.
Office: 650 604 1882 Mobile: 408 230 2715
M/S 269-1, Building N269/260-7
NASA Ames Research Center
Moffett Field, CA 94035-1000
I do not speak for QTS Inc., SGT, Code TI, or NASA, nor do they speak for me.
|
|
From: López P. D. <die...@ed...> - 2015-11-18 18:08:46
|
Dear PLEXIL support:
I'm using PLEXIL for operate a robot in a research project of the Universidad de Alcalá. I have a problem with a LookupOnChange for make a timer. At present I use OSNativeTime as time adapter, and the node which contains the timer is the next:
Timer:
{
Real now;
EndCondition LookupOnChange(time)>now+15;
now=LookupNow(time);
}
(15 are the seconds for stop the timer).
When I execute this node never ends.
NOTE: PLEXIL version is 2.5.
I would appreciate more information about LookupOnChange, and sorry if my english is very bad.
A greeting
Diego.
|
|
From: Fry, C. R. {C. (ARC-TI)[S. INC] <chu...@na...> - 2015-07-29 19:08:32
|
The ExitCondition on the node WaitingForCorrectPressureLevel actually did become true... briefly. Once it did and the node began exiting, the assignment to distillerPressureCorrect was undone, because its ancestor exit condition became true while the assignment node was in EXECUTING.
I am well aware that this behavior is unintuitive, to put it mildly, but it is in fact the documented behavior in Plexil.
-- Chuck
On Jul 29, 2015, at 11:43 AM, Catherine Szeto <Cat...@ti...<mailto:Cat...@ti...>> wrote:
In my original case, it seemed like the ExitCondition never became true even though it should have. Did the first two pressure-checking nodes turning true affect the ExitCondition? I understand your explanation, but I'm not sure what parent node was causing the issue in this case.
Thanks for your prompt replies and assistance, by the way. I appreciate it.
Catherine
From: Fry, Charles R. {Chuck} (ARC-TI)[SGT, INC] [mailto:chu...@na...<http://nasa.gov>]
Sent: Wednesday, July 29, 2015 12:30 PM
To: Catherine Szeto
Cc: Fry, Charles R. {Chuck} (ARC-TI)[SGT, INC]; <ple...@li...<mailto:ple...@li...>>
Subject: Re: [plexil-support] Three near-identical StartConditions, only one is not working
Yes, it appears that was the cause. ExitCondition behaves very similarly to InvariantCondition with a reversed logical sense: as soon as the ExitCondition of a parent node becomes true, every descendant node is aborted.
This includes Assignment nodes. When aborted, an Assignment node restores the variable's previous value.
-- Chuck
On Jul 29, 2015, at 10:20 AM, Catherine Szeto <Cat...@ti...<mailto:Cat...@ti...>> wrote:
I tried that and I got successful results! To be sure, I tried the test with the pressures meeting the StartCondition and then not meeting the StartCondition. The loops stops when the StartConditions are all met and keeps going if they are not, which is expected.
Was the redundancy between the ExitCondition and the RepeatCondition the root cause of my original issue?
Catherine
From: Fry, Charles R. {Chuck} (ARC-TI)[SGT, INC] [mailto:chu...@na...<http://nasa.gov/>]
Sent: Wednesday, July 29, 2015 11:15 AM
To: Catherine Szeto
Cc: Fry, Charles R. {Chuck} (ARC-TI)[SGT, INC]; <ple...@li...<mailto:ple...@li...>>
Subject: Re: [plexil-support] Three near-identical StartConditions, only one is not working
Remove the ExitCondition on WaitingForCorrectPressureLevel and see what happens. It appears this redundant test is causing the loop to exit as soon as the last flag is assigned the value true.
-- Chuck
On Jul 29, 2015, at 7:53 AM, Catherine Szeto <Cat...@ti...<mailto:Cat...@ti...>>
wrote:
Chuck,
Since I couldn't figure out anything wrong with the distiller pressure node, I tried rearranging the three "Check...Pressure" nodes as brine, distiller, and product, versus the brine, product, and distiller. This time the product node was having issues exiting out. It seems to me that the loop is not correctly executing the third node, no matter which one it is. For easier testing, all three pressures are coded as "0" with the "scaledNomVacPressure" coded as "35".
I used the debug feature as you suggested. Below is what the console output was for one iteration. I highlighted the distiller pressure check in question. I've attached a screenshot of the Plexil viewer screen.
[Node:transition]Transitioning 'CheckBrinePressure' from WAITING to FINISHED at 1438124839.65869
[Node:outcome]Outcome of 'CheckBrinePressure' is SKIPPED
[Node:transition]Transitioning 'ASSIGNMENT__44' from FINISHED to INACTIVE at 1438124839.65869
[Node:transition]Transitioning 'PrintBrinePressure' from FINISHED to INACTIVE at 1438124839.65869
[Node:transition]Transitioning 'ASSIGNMENT__46' from FINISHED to INACTIVE at 1438124839.65869
[Node:transition]Transitioning 'PrintProductPressure' from FINISHED to INACTIVE at 1438124839.65869
[Node:transition]Transitioning 'ASSIGNMENT__48' from FINISHED to INACTIVE at 1438124839.65869
[Node:transition]Transitioning 'PrintDistillerPressure' from FINISHED to INACTIVE at 1438124839.65869
[Node:transition]Transitioning 'CheckProductPressure' from WAITING to FINISHED at 1438124839.65869
[Node:outcome]Outcome of 'CheckProductPressure' is SKIPPED
[Node:transition]Transitioning 'ASSIGNMENT__44' from INACTIVE to FINISHED at 1438124839.65869
[Node:outcome]Outcome of 'ASSIGNMENT__44' is SKIPPED
[Node:transition]Transitioning 'PrintBrinePressure' from INACTIVE to FINISHED at 1438124839.65869
[Node:outcome]Outcome of 'PrintBrinePressure' is SKIPPED
[Node:transition]Transitioning 'CheckDistillerPressure' from WAITING to EXECUTING at 1438124839.65869
[Node:transition]Transitioning 'ASSIGNMENT__46' from INACTIVE to FINISHED at 1438124839.65869
[Node:outcome]Outcome of 'ASSIGNMENT__46' is SKIPPED
[Node:transition]Transitioning 'PrintProductPressure' from INACTIVE to FINISHED at 1438124839.65869
[Node:outcome]Outcome of 'PrintProductPressure' is SKIPPED
[Node:transition]Transitioning 'ASSIGNMENT__48' from INACTIVE to WAITING at 1438124839.65869
[Node:transition]Transitioning 'PrintDistillerPressure' from INACTIVE to WAITING at 1438124839.65869
[Node:transition]Transitioning 'ASSIGNMENT__48' from WAITING to EXECUTING at 1438124839.65869
[Node:transition]Transitioning 'ASSIGNMENT__48' from EXECUTING to FAILING at 1438124839.65989
[Node:transition]Transitioning 'PrintDistillerPressure' from WAITING to FINISHED at 1438124839.65989
[Node:outcome]Outcome of 'PrintDistillerPressure' is SKIPPED
[Node:transition]Transitioning 'CheckDistillerPressure' from EXECUTING to FAILING at 1438124839.65989
[Node:transition]Transitioning 'WaitingForCorrectPressureLevel' from EXECUTING to FAILING at 1438124839.65989
[Node:transition]Transitioning 'ASSIGNMENT__48' from FAILING to FINISHED at 1438124839.65998
[Node:outcome]Outcome of 'ASSIGNMENT__48' is INTERRUPTED
[Node:transition]Transitioning 'CheckDistillerPressure' from FAILING to FINISHED at 1438124839.65998
[Node:outcome]Outcome of 'CheckDistillerPressure' is INTERRUPTED
[Node:transition]Transitioning 'WaitingForCorrectPressureLevel' from FAILING to ITERATION_ENDED at 1438124839.65998
Catherine
From: Fry, Charles R. {Chuck} (ARC-TI)[SGT, INC] [mailto:chu...@na...<http://nasa.gov/>]
Sent: Tuesday, July 28, 2015 4:34 PM
To: Catherine Szeto
Cc: Fry, Charles R. {Chuck} (ARC-TI)[SGT, INC]; <ple...@li...<mailto:ple...@li...>>
Subject: Re: [plexil-support] Three near-identical StartConditions, only one is not working
I don't see any issues with the files you sent this time.
Are you familiar with Plexil's debug trace faciliity? Is this running in an environment where you can spill a lot of debug info to a "console" or log file?
If you can, I'd like to see the output from a run with the following debug configuration:
:Node:transition
:Node:outcome
:Node:failure
The text above should be placed in a file named 'Debug.cfg' in the working directory from which Plexil is launched.
If you can't do this, let me see if I can find another way to ferret out what's really happening.
-- Chuck
On Jul 28, 2015, at 6:13 AM, Catherine Szeto <Cat...@ti...<mailto:Cat...@ti...>> wrote:
Sorry about that. I attached a plan with a similar name. Attached are the correct files.
Yes, the pressures start high and go lower. I cannot figure out if I have any incorrect syntax either, but it's bizarre that the nodes for the other two pressures are working fine while the last one is not.
Catherine
From: Fry, Charles R. {Chuck} (ARC-TI)[SGT, INC] [mailto:chu...@na...<http://nasa.gov/>]
Sent: Monday, July 27, 2015 6:28 PM
To: Catherine Szeto
Cc: <ple...@li...<mailto:ple...@li...>>
Subject: Re: [plexil-support] Three near-identical StartConditions, only one is not working
Hi Catherine. The attached files don't contain the fragments you quote below. Are you paraphrasing or did you mean to send some other files?
I don't see anything in the quoted code that looks incorrect.
I presume all the pressures are starting high and trending lower?
-- Chuck
On Jul 27, 2015, at 2:56 PM, Catherine Szeto <Cat...@ti...<mailto:Cat...@ti...>> wrote:
Hello Plexil team,
I have this part in my code in the attached Plexil plan:
CheckDistillerPressure:
{
StartCondition Lookup(PressureCdsskmCdTank) <= scaledNomVacPressure;
SkipCondition distillerPressureCorrect || (Lookup(PressureCdsskmCdTank) > scaledNomVacPressure);
distillerPressureCorrect = true;
PrintDistillerPressure: { pprint("EVT: distiller", Lookup(PressureCdsskmCdTank), "." );}
}
The plan basically has two separate loops and the plan runs one of the loops depending on a “full” or “empty” parameter. Both the “full” and “empty” loops have an inner loop that keeps checking “product”, “brine”, and “distiller” pressures. The inner loop prints out a statement when each pressure has met the correct pressure, and then exits when all three have met the correct pressure. When I run the plan, the “brine” and “product” pressures have no issues. The node checking for distiller pressure (the one copied and pasted above) never starts. I did some simple debugging by having the “distiller” pressure continuously printed, and was able to verify that the distiller pressure, “Lookup(PressureCdsskmCdTank)”, is reading the correct input and actually is meeting the correct pressure. I tried hard-coding the “scaledNomVacPressure” in the StartCondition to “35”, which is the correct pressure threshold, but that didn’t changed anything.
The nodes that check for the product, brine, and distiller pressures are virtually identical, so I cannot figure out why the distiller pressure is having trouble while the brine and product are not. I would appreciate any suggestions to look into. For context, this is the loop that checks for the pressures:
WaitingForCorrectPressureLevel:
{
ExitCondition ((Lookup(time,0.1) - StartTimer.EXECUTING.START) > Lookup(VacuumTimeoutINTL)) ||
(brinePressureCorrect && productPressureCorrect && distillerPressureCorrect);
RepeatCondition (Lookup(time,0.1) - StartTimer.EXECUTING.START) <= Lookup(VacuumTimeoutINTL) &&
(!brinePressureCorrect || !productPressureCorrect || !distillerPressureCorrect);
CheckBrinePressure:
{
StartCondition Lookup(PressureCdsskmBrineTank) <= scaledNomVacPressure;
SkipCondition brinePressureCorrect || (Lookup(PressureCdsskmBrineTank) > scaledNomVacPressure);
brinePressureCorrect = true;
PrintBrinePressure: { pprint("EVT: brine", Lookup(PressureCdsskmBrineTank), "." );}
}
CheckProductPressure:
{
StartCondition Lookup(PressureCdsskmProductTank) <= scaledNomVacPressure;
SkipCondition productPressureCorrect || (Lookup(PressureCdsskmProductTank) > scaledNomVacPressure);
productPressureCorrect = true;
PrintProductPressure: { pprint("EVT: product", Lookup(PressureCdsskmProductTank), "." );}
}
CheckDistillerPressure:
{
StartCondition Lookup(PressureCdsskmCdTank) <= scaledNomVacPressure;
SkipCondition distillerPressureCorrect || (Lookup(PressureCdsskmCdTank) > scaledNomVacPressure);
distillerPressureCorrect = true;
PrintDistillerPressure: { pprint("EVT: distiller", Lookup(PressureCdsskmCdTank), "." );}
}
} //end of WaitingForCorrectPressureLevel
} //end of ApplyVacuumToAll_Sequence_FullLoop
Thanks,
Catherine
<ApplyVacuumTo.ple><ApplyVacuumTo.plx>------------------------------------------------------------------------------
_______________________________________________
plexil-support mailing list
ple...@li...<mailto:ple...@li...>
https://lists.sourceforge.net/lists/listinfo/plexil-support
Chuck Fry | QTS Inc.
Office: 650 604 1882 Mobile: 408 230 2715
M/S 269-1, Building N269/260-7
NASA Ames Research Center
Moffett Field, CA 94035-1000
I do not speak for QTS Inc., SGT, Code TI, or NASA, nor do they speak for me.
<ApplyVacuumToAll.ple><ApplyVacuumToAll.plx>
Chuck Fry | QTS Inc.
Office: 650 604 1882 Mobile: 408 230 2715
M/S 269-1, Building N269/260-7
NASA Ames Research Center
Moffett Field, CA 94035-1000
I do not speak for QTS Inc., SGT, Code TI, or NASA, nor do they speak for me.
<Pressure check issue.PNG>
Chuck Fry | QTS Inc.
Office: 650 604 1882 Mobile: 408 230 2715
M/S 269-1, Building N269/260-7
NASA Ames Research Center
Moffett Field, CA 94035-1000
I do not speak for QTS Inc., SGT, Code TI, or NASA, nor do they speak for me.
Chuck Fry | QTS Inc.
Office: 650 604 1882 Mobile: 408 230 2715
M/S 269-1, Building N269/260-7
NASA Ames Research Center
Moffett Field, CA 94035-1000
I do not speak for QTS Inc., SGT, Code TI, or NASA, nor do they speak for me.
Chuck Fry | QTS Inc.
Office: 650 604 1882 Mobile: 408 230 2715
M/S 269-1, Building N269/260-7
NASA Ames Research Center
Moffett Field, CA 94035-1000
I do not speak for QTS Inc., SGT, Code TI, or NASA, nor do they speak for me.
|
|
From: Catherine S. <Cat...@ti...> - 2015-07-29 18:44:29
|
In my original case, it seemed like the ExitCondition never became true even though it should have. Did the first two pressure-checking nodes turning true affect the ExitCondition? I understand your explanation, but I'm not sure what parent node was causing the issue in this case.
Thanks for your prompt replies and assistance, by the way. I appreciate it.
Catherine
From: Fry, Charles R. {Chuck} (ARC-TI)[SGT, INC] [mailto:chu...@na...]
Sent: Wednesday, July 29, 2015 12:30 PM
To: Catherine Szeto
Cc: Fry, Charles R. {Chuck} (ARC-TI)[SGT, INC]; <ple...@li...>
Subject: Re: [plexil-support] Three near-identical StartConditions, only one is not working
Yes, it appears that was the cause. ExitCondition behaves very similarly to InvariantCondition with a reversed logical sense: as soon as the ExitCondition of a parent node becomes true, every descendant node is aborted.
This includes Assignment nodes. When aborted, an Assignment node restores the variable's previous value.
-- Chuck
On Jul 29, 2015, at 10:20 AM, Catherine Szeto <Cat...@ti...<mailto:Cat...@ti...>> wrote:
I tried that and I got successful results! To be sure, I tried the test with the pressures meeting the StartCondition and then not meeting the StartCondition. The loops stops when the StartConditions are all met and keeps going if they are not, which is expected.
Was the redundancy between the ExitCondition and the RepeatCondition the root cause of my original issue?
Catherine
From: Fry, Charles R. {Chuck} (ARC-TI)[SGT, INC] [mailto:chu...@na...<http://nasa.gov>]
Sent: Wednesday, July 29, 2015 11:15 AM
To: Catherine Szeto
Cc: Fry, Charles R. {Chuck} (ARC-TI)[SGT, INC]; <ple...@li...<mailto:ple...@li...>>
Subject: Re: [plexil-support] Three near-identical StartConditions, only one is not working
Remove the ExitCondition on WaitingForCorrectPressureLevel and see what happens. It appears this redundant test is causing the loop to exit as soon as the last flag is assigned the value true.
-- Chuck
On Jul 29, 2015, at 7:53 AM, Catherine Szeto <Cat...@ti...<mailto:Cat...@ti...>>
wrote:
Chuck,
Since I couldn't figure out anything wrong with the distiller pressure node, I tried rearranging the three "Check...Pressure" nodes as brine, distiller, and product, versus the brine, product, and distiller. This time the product node was having issues exiting out. It seems to me that the loop is not correctly executing the third node, no matter which one it is. For easier testing, all three pressures are coded as "0" with the "scaledNomVacPressure" coded as "35".
I used the debug feature as you suggested. Below is what the console output was for one iteration. I highlighted the distiller pressure check in question. I've attached a screenshot of the Plexil viewer screen.
[Node:transition]Transitioning 'CheckBrinePressure' from WAITING to FINISHED at 1438124839.65869
[Node:outcome]Outcome of 'CheckBrinePressure' is SKIPPED
[Node:transition]Transitioning 'ASSIGNMENT__44' from FINISHED to INACTIVE at 1438124839.65869
[Node:transition]Transitioning 'PrintBrinePressure' from FINISHED to INACTIVE at 1438124839.65869
[Node:transition]Transitioning 'ASSIGNMENT__46' from FINISHED to INACTIVE at 1438124839.65869
[Node:transition]Transitioning 'PrintProductPressure' from FINISHED to INACTIVE at 1438124839.65869
[Node:transition]Transitioning 'ASSIGNMENT__48' from FINISHED to INACTIVE at 1438124839.65869
[Node:transition]Transitioning 'PrintDistillerPressure' from FINISHED to INACTIVE at 1438124839.65869
[Node:transition]Transitioning 'CheckProductPressure' from WAITING to FINISHED at 1438124839.65869
[Node:outcome]Outcome of 'CheckProductPressure' is SKIPPED
[Node:transition]Transitioning 'ASSIGNMENT__44' from INACTIVE to FINISHED at 1438124839.65869
[Node:outcome]Outcome of 'ASSIGNMENT__44' is SKIPPED
[Node:transition]Transitioning 'PrintBrinePressure' from INACTIVE to FINISHED at 1438124839.65869
[Node:outcome]Outcome of 'PrintBrinePressure' is SKIPPED
[Node:transition]Transitioning 'CheckDistillerPressure' from WAITING to EXECUTING at 1438124839.65869
[Node:transition]Transitioning 'ASSIGNMENT__46' from INACTIVE to FINISHED at 1438124839.65869
[Node:outcome]Outcome of 'ASSIGNMENT__46' is SKIPPED
[Node:transition]Transitioning 'PrintProductPressure' from INACTIVE to FINISHED at 1438124839.65869
[Node:outcome]Outcome of 'PrintProductPressure' is SKIPPED
[Node:transition]Transitioning 'ASSIGNMENT__48' from INACTIVE to WAITING at 1438124839.65869
[Node:transition]Transitioning 'PrintDistillerPressure' from INACTIVE to WAITING at 1438124839.65869
[Node:transition]Transitioning 'ASSIGNMENT__48' from WAITING to EXECUTING at 1438124839.65869
[Node:transition]Transitioning 'ASSIGNMENT__48' from EXECUTING to FAILING at 1438124839.65989
[Node:transition]Transitioning 'PrintDistillerPressure' from WAITING to FINISHED at 1438124839.65989
[Node:outcome]Outcome of 'PrintDistillerPressure' is SKIPPED
[Node:transition]Transitioning 'CheckDistillerPressure' from EXECUTING to FAILING at 1438124839.65989
[Node:transition]Transitioning 'WaitingForCorrectPressureLevel' from EXECUTING to FAILING at 1438124839.65989
[Node:transition]Transitioning 'ASSIGNMENT__48' from FAILING to FINISHED at 1438124839.65998
[Node:outcome]Outcome of 'ASSIGNMENT__48' is INTERRUPTED
[Node:transition]Transitioning 'CheckDistillerPressure' from FAILING to FINISHED at 1438124839.65998
[Node:outcome]Outcome of 'CheckDistillerPressure' is INTERRUPTED
[Node:transition]Transitioning 'WaitingForCorrectPressureLevel' from FAILING to ITERATION_ENDED at 1438124839.65998
Catherine
From: Fry, Charles R. {Chuck} (ARC-TI)[SGT, INC] [mailto:chu...@na...<http://nasa.gov/>]
Sent: Tuesday, July 28, 2015 4:34 PM
To: Catherine Szeto
Cc: Fry, Charles R. {Chuck} (ARC-TI)[SGT, INC]; <ple...@li...<mailto:ple...@li...>>
Subject: Re: [plexil-support] Three near-identical StartConditions, only one is not working
I don't see any issues with the files you sent this time.
Are you familiar with Plexil's debug trace faciliity? Is this running in an environment where you can spill a lot of debug info to a "console" or log file?
If you can, I'd like to see the output from a run with the following debug configuration:
:Node:transition
:Node:outcome
:Node:failure
The text above should be placed in a file named 'Debug.cfg' in the working directory from which Plexil is launched.
If you can't do this, let me see if I can find another way to ferret out what's really happening.
-- Chuck
On Jul 28, 2015, at 6:13 AM, Catherine Szeto <Cat...@ti...<mailto:Cat...@ti...>> wrote:
Sorry about that. I attached a plan with a similar name. Attached are the correct files.
Yes, the pressures start high and go lower. I cannot figure out if I have any incorrect syntax either, but it's bizarre that the nodes for the other two pressures are working fine while the last one is not.
Catherine
From: Fry, Charles R. {Chuck} (ARC-TI)[SGT, INC] [mailto:chu...@na...<http://nasa.gov/>]
Sent: Monday, July 27, 2015 6:28 PM
To: Catherine Szeto
Cc: <ple...@li...<mailto:ple...@li...>>
Subject: Re: [plexil-support] Three near-identical StartConditions, only one is not working
Hi Catherine. The attached files don't contain the fragments you quote below. Are you paraphrasing or did you mean to send some other files?
I don't see anything in the quoted code that looks incorrect.
I presume all the pressures are starting high and trending lower?
-- Chuck
On Jul 27, 2015, at 2:56 PM, Catherine Szeto <Cat...@ti...<mailto:Cat...@ti...>> wrote:
Hello Plexil team,
I have this part in my code in the attached Plexil plan:
CheckDistillerPressure:
{
StartCondition Lookup(PressureCdsskmCdTank) <= scaledNomVacPressure;
SkipCondition distillerPressureCorrect || (Lookup(PressureCdsskmCdTank) > scaledNomVacPressure);
distillerPressureCorrect = true;
PrintDistillerPressure: { pprint("EVT: distiller", Lookup(PressureCdsskmCdTank), "." );}
}
The plan basically has two separate loops and the plan runs one of the loops depending on a "full" or "empty" parameter. Both the "full" and "empty" loops have an inner loop that keeps checking "product", "brine", and "distiller" pressures. The inner loop prints out a statement when each pressure has met the correct pressure, and then exits when all three have met the correct pressure. When I run the plan, the "brine" and "product" pressures have no issues. The node checking for distiller pressure (the one copied and pasted above) never starts. I did some simple debugging by having the "distiller" pressure continuously printed, and was able to verify that the distiller pressure, "Lookup(PressureCdsskmCdTank)", is reading the correct input and actually is meeting the correct pressure. I tried hard-coding the "scaledNomVacPressure" in the StartCondition to "35", which is the correct pressure threshold, but that didn't changed anything.
The nodes that check for the product, brine, and distiller pressures are virtually identical, so I cannot figure out why the distiller pressure is having trouble while the brine and product are not. I would appreciate any suggestions to look into. For context, this is the loop that checks for the pressures:
WaitingForCorrectPressureLevel:
{
ExitCondition ((Lookup(time,0.1) - StartTimer.EXECUTING.START) > Lookup(VacuumTimeoutINTL)) ||
(brinePressureCorrect && productPressureCorrect && distillerPressureCorrect);
RepeatCondition (Lookup(time,0.1) - StartTimer.EXECUTING.START) <= Lookup(VacuumTimeoutINTL) &&
(!brinePressureCorrect || !productPressureCorrect || !distillerPressureCorrect);
CheckBrinePressure:
{
StartCondition Lookup(PressureCdsskmBrineTank) <= scaledNomVacPressure;
SkipCondition brinePressureCorrect || (Lookup(PressureCdsskmBrineTank) > scaledNomVacPressure);
brinePressureCorrect = true;
PrintBrinePressure: { pprint("EVT: brine", Lookup(PressureCdsskmBrineTank), "." );}
}
CheckProductPressure:
{
StartCondition Lookup(PressureCdsskmProductTank) <= scaledNomVacPressure;
SkipCondition productPressureCorrect || (Lookup(PressureCdsskmProductTank) > scaledNomVacPressure);
productPressureCorrect = true;
PrintProductPressure: { pprint("EVT: product", Lookup(PressureCdsskmProductTank), "." );}
}
CheckDistillerPressure:
{
StartCondition Lookup(PressureCdsskmCdTank) <= scaledNomVacPressure;
SkipCondition distillerPressureCorrect || (Lookup(PressureCdsskmCdTank) > scaledNomVacPressure);
distillerPressureCorrect = true;
PrintDistillerPressure: { pprint("EVT: distiller", Lookup(PressureCdsskmCdTank), "." );}
}
} //end of WaitingForCorrectPressureLevel
} //end of ApplyVacuumToAll_Sequence_FullLoop
Thanks,
Catherine
<ApplyVacuumTo.ple><ApplyVacuumTo.plx>------------------------------------------------------------------------------
_______________________________________________
plexil-support mailing list
ple...@li...<mailto:ple...@li...>
https://lists.sourceforge.net/lists/listinfo/plexil-support
Chuck Fry | QTS Inc.
Office: 650 604 1882 Mobile: 408 230 2715
M/S 269-1, Building N269/260-7
NASA Ames Research Center
Moffett Field, CA 94035-1000
I do not speak for QTS Inc., SGT, Code TI, or NASA, nor do they speak for me.
<ApplyVacuumToAll.ple><ApplyVacuumToAll.plx>
Chuck Fry | QTS Inc.
Office: 650 604 1882 Mobile: 408 230 2715
M/S 269-1, Building N269/260-7
NASA Ames Research Center
Moffett Field, CA 94035-1000
I do not speak for QTS Inc., SGT, Code TI, or NASA, nor do they speak for me.
<Pressure check issue.PNG>
Chuck Fry | QTS Inc.
Office: 650 604 1882 Mobile: 408 230 2715
M/S 269-1, Building N269/260-7
NASA Ames Research Center
Moffett Field, CA 94035-1000
I do not speak for QTS Inc., SGT, Code TI, or NASA, nor do they speak for me.
Chuck Fry | QTS Inc.
Office: 650 604 1882 Mobile: 408 230 2715
M/S 269-1, Building N269/260-7
NASA Ames Research Center
Moffett Field, CA 94035-1000
I do not speak for QTS Inc., SGT, Code TI, or NASA, nor do they speak for me.
|