我正在尝试将我的应用程序从手动构建迁移到autoconf,到目前为止它工作得非常好.但我有一个静态库,我无法弄清楚如何集成.该库不会位于通常的库位置 - 二进制文件(.a文件)和头文件(.h文件)的位置将作为configure参数给出.(值得注意的是,即使我将.a文件移动到/ usr/lib或我能想到的任何其他地方,它仍然无法工作.)它也没有传统命名(它不以"lib"或"l"开头) ").
手动编译正在使用这些(目录不可预测 - 这只是一个例子):
gcc ... -I/home/john/mystuff /home/john/mystuff/helper.a
Run Code Online (Sandbox Code Playgroud)
(呃,我实际上不明白为什么直接引用.a文件,而不是-L或者其他任何东西.是的,我对构建C程序有一种半生不熟的理解.)
因此,在我的configure.ac中,我可以使用相关的configure参数使用AC_CHECK_HEADER成功找到标头(.h文件).在AC_CHECK_HEADER中我然后将位置添加到CPFLAGS并且实际C代码中的头文件的#include很好地拾取它.
给定一个已放入$ location的configure参数,并且所需文件的名称是helper.h和helper.a(它们都在同一目录中),到目前为止这是有用的:
AC_CHECK_HEADER([$location/helper.h],
[AC_DEFINE([HAVE_HELPER_H], [1], [found helper.h])
CFLAGS="$CFLAGS -I$location"])
Run Code Online (Sandbox Code Playgroud)
我遇到困难的地方是链接二进制文件(.a文件).无论我尝试什么,我总是得到一个关于该库函数调用的未定义引用的错误.我很确定这是一个链接问题,因为我可以对C代码大惊小怪,并在对该库的函数调用中产生故意错误,该错误会产生早期错误,表明函数原型已经加载并用于编译.
我尝试将包含.a文件的位置添加到LDFLAGS,然后执行AC_CHECK_LIB,但找不到它.
也许我的语法错了,或者我错过了一些更基本的东西,这并不奇怪,因为我是一个新手并且不知道我在做什么.
这是我尝试过的:
AC_CHECK_HEADER([$location/helper.h],
[AC_DEFINE([HAVE_HELPER_H], [1], [found helper.h])
CFLAGS="$CFLAGS -I$location";
LDFLAGS="$LDFLAGS -L$location";
AC_CHECK_LIB(helper)])
Run Code Online (Sandbox Code Playgroud)
没有骰子.AC_CHECK_LIB正在寻找-lhelper我猜(或libhelper?)因此我不确定这是否有问题,所以我也试过了(省略AC_CHECK_LIB并直接在LDFLAGS中包含.a),没有运气:
AC_CHECK_HEADER([$location/helper.h],
[AC_DEFINE([HAVE_HELPER_H], [1], [found helper.h])
CFLAGS="$CFLAGS -I$location";
LDFLAGS="$LDFLAGS -L$location/helper.a"])
Run Code Online (Sandbox Code Playgroud)
为了模拟手动编译,我尝试删除-L但这没有帮助:
AC_CHECK_HEADER([$location/helper.h],
[AC_DEFINE([HAVE_HELPER_H], [1], [found helper.h])
CFLAGS="$CFLAGS -I$location";
LDFLAGS="$LDFLAGS $location/helper.a"])
Run Code Online (Sandbox Code Playgroud)
我尝试了其他组合和排列,但我想我可能会遗漏一些更基本的东西......
================更新
我使用_LDADD在Makefile.am中使用硬编码的.a文件路径,如下所示:
myprog_LDADD=/home/john/mystuff/helper.a
Run Code Online (Sandbox Code Playgroud)
但我无法预测.a文件的位置.出于某种原因,在configure.ac中定义myprog_LDADD不起作用(我希望它可以,所以我可以使用我的动态位置变量),并且没有LDFLAGS,myprog_LDFLAGS,AM_LDFLAGS的更改组合似乎工作.
如果,在Makefile.am中,我尝试使用configure.ac中定义的变量位置,它不起作用
myprog_LDADD=($location)helper.a
Run Code Online (Sandbox Code Playgroud)
================更新
我想我已经明白了,但由于我不知道我在做什么,我真的很感激一些反馈.我使用AC_SUBST()从configure.ac获取myprog_LDADD,因此最终解决方案如下所示:
AC_CHECK_HEADER([$location/helper.h],
[AC_DEFINE([HAVE_HELPER_H], [1], [found helper.h])
CFLAGS="$CFLAGS -I$location"
myprog_LDADD="$location/helper.a"
AC_SUBST(myprog_LDADD)])
Run Code Online (Sandbox Code Playgroud) 我想得到某个标签的名称(告诉它是否为div/input/span/p/so)
我发现有3个不同的属性给我标签名称:
tagName,nodeName和localName
我的问题是:哪一个在所有浏览器中最受支持?和/或是否有一种方法来获取Prototype中的标签名称(我看了但找不到)?
尝试使用jQuery在点击事件上发送POST请求而没有运气.这是我使用的:
<script type="text/javascript">
$('#taxi_update').click(
$.ajax({
'type':'POST',
'data':'id=17446&chru=0',
'success':function() { ... },
'error':function(){ ... },
'url':'/url/',
'cache':false
})
);
</script>
<a href="#" id="taxi_update">update</a>
Run Code Online (Sandbox Code Playgroud)
不幸的是,它不发送任何POST请求.
有什么建议可能有什么问题吗?
在Visual Studio中,我总是使用Ctrl+ Tab和Ctrl+ Shift+ Tab在文档之间导航.我看到Eclipse有Ctrl+ F6在编辑器之间导航,但这并不是几乎相同的行为.区别在于,按一次然后再按一次将使您在两个文件之间来回移动,而在VS中,它将使您根据编辑器中的Tab键顺序向前导航.关于如何复制VS的行为的任何想法?
我试图找到一种方法来将整数值与负值相乘,只是位移.
通常我通过使用最接近我的因子的2的幂进行移位并且仅添加/减去其余部分,例如 x * 7 = ((x << 3) - x)
假设我想计算x * -112.我能想象的唯一方法是-((x << 7) - (x << 4),计算x * 112并在之后否定它.
有没有"更漂亮"的方式来做到这一点?
如何判断小数或双精度值是否为整数?
例如:
decimal d = 5.0; // Would be true
decimal f = 5.5; // Would be false
Run Code Online (Sandbox Code Playgroud)
要么
double d = 5.0; // Would be true
double f = 5.5; // Would be false
Run Code Online (Sandbox Code Playgroud)
我想知道这个的原因是我可以通过编程方式确定是否要使用.ToString("N0")或输出值.ToString("N2").如果没有小数点值,那么我不想显示.
我有一个返回JSON的控制器.它采用一种形式,通过弹簧注释验证自己.我可以从BindingResult获取FieldError列表,但它们不包含JSP将在标记中显示的文本.如何将错误文本发送回JSON?
@RequestMapping(method = RequestMethod.POST)
public
@ResponseBody
JSONResponse submit(@Valid AnswerForm answerForm, BindingResult result, Model model, HttpServletRequest request, HttpServletResponse response) {
if (result.hasErrors()) {
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
JSONResponse r = new JSONResponse();
r.setStatus(JSONResponseStatus.ERROR);
//HOW DO I GET ERROR MESSAGES OUT OF BindingResult???
} else {
JSONResponse r = new JSONResponse();
r.setStatus(JSONResponseStatus.OK);
return r;
}
}
Run Code Online (Sandbox Code Playgroud)
JSONREsponse类只是一个POJO
public class JSONResponse implements Serializable {
private JSONResponseStatus status;
private String error;
private Map<String,String> errors;
private Map<String,Object> data;
...getters and setters...
}
Run Code Online (Sandbox Code Playgroud)
调用BindingResult.getAllErrors()返回FieldError对象的数组,但它没有实际的错误.
将包含ASP.NET页面的功能部署到开发SharePoint服务器时,我收到以下错误:
System.InvalidOperationException:找不到ObjectDataSource'odsYears'的TypeName属性中指定的类型.
我们的.dll正在部署到GAC,我们的页面将被部署到12个配置单元中的相应功能目录中.我们在Sandbox SharePoint服务器上没有收到此错误.我拆解了.dll,以确保正在部署该类,一切看起来都不错.
有没有人知道为什么这不适用于我们的某个SharePoint环境?
谢谢.
我正在尝试构建一个MaybeT-Transformer Monad,基于真实世界Haskell,Monad变换器章节中的示例:
data MaybeT m a = MaybeT { runMT :: m (Maybe a) }
instance (Monad m) => Monad (MaybeT m) where
m >>= f = MaybeT $ do a <- runMT m
case a of
Just x -> runMT (f x)
Nothing -> return Nothing
return a = MaybeT $ return (Just a)
instance MonadTrans MaybeT where
lift m = MaybeT $ do
a <- m
return (Just a)
Run Code Online (Sandbox Code Playgroud)
这很好,但现在我想让MaybeT成为MonadWriter的一个实例:
instance (MonadWriter w m) …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Horner的规则将单词转换为整数.我理解它是如何工作的,如果这个词很长,它可能会导致溢出.我的最终目标是在散列函数h(x)= x mod tableSize中使用转换后的整数.我的书建议,由于溢出,你可以"在计算Horner规则中的每个带括号的表达式之后应用mod运算符." 我并不完全明白这是什么意思.说表达式如下:
((14*32 + 15)*32 + 20)*32 + 5
我是否在每个带括号的表达式后使用mod tableSize并将它们一起添加?这个散列函数和Horner规则的例子会是什么样子?
java ×2
ajax ×1
asp.net ×1
autoconf ×1
autotools ×1
c ×1
c# ×1
eclipse ×1
hashtable ×1
haskell ×1
html ×1
javascript ×1
jquery ×1
json ×1
navigation ×1
post ×1
prototypejs ×1
sharepoint ×1
spring ×1
spring-mvc ×1
typeclass ×1